1

私は、 http://sagecell.sagemath.org/kernel (投稿のみ、データなし) に投稿要求を送信する必要があるプロジェクトに取り組んでいます。 .

次のようにデフォルトの httpClient を使用すると、これは正常に機能します。

httpClient = new DefaultHttpClient();

HttpPost httpPost = new HttpPost();

String url = UrlUtils.getKernelURL();

httpPost.setURI(URI.create(url));

ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair(HEADER_ACCEPT_ENCODING,VALUE_IDENTITY));
postParameters.add(new BasicNameValuePair(HEADER_TOS,"true"));
httpPost.setEntity(new UrlEncodedFormEntity(postParameters));

HttpResponse httpResponse = httpClient.execute(httpPost);
InputStream inputStream = httpResponse.getEntity().getContent();

webSocketResponse = gson.fromJson(new InputStreamReader(inputStream), WebSocketResponse.class);
inputStream.close();

ただし、OkHttpClient を使用して同じものを使用したい場合は、403 エラーが発生します。

httpClient = new OkHttpClient();

public static final MediaType jsonMediaType = MediaType.parse("application/json; charset=utf-8");

RequestBody body = RequestBody.create(jsonMediaType, "");

Request request = new Request.Builder()
        .addHeader(HEADER_ACCEPT_ENCODING, VALUE_IDENTITY)
        .addHeader(HEADER_TOS, "true")
        .url(url)
        .post(body) //I've tried null here as well
        .build();

Response response = httpClient.newCall(request).execute();

Log.i(TAG,"STATUS CODE"+response.code()); //This is 403

これは、Ion や HttpUrlConnection などのライブラリでも同じで、Apache クライアントだけが機能しているようです。

これが機能しない理由についての回答をいただければ幸いです。

4

2 に答える 2

0

リクエストの本文が空です。フォーム エンコードされたリクエスト ボディ、または JSON リクエスト ボディ、および対応するコンテンツ タイプを提供する必要があります。

必要に応じて、MimeCraftがフォーム エンコードされたリクエスト ボディを作成し、Gsonが JSON を実行します。

于 2014-06-03T14:50:01.980 に答える
0

エラー 403 は、サーバーによって禁止されていることを意味します。最初のケース (デフォルトの httpclient を使用している場合) では、ヘッダーを追加するのではなく、名前と値のペアをエンティティに追加するだけです。使用する必要があるヘッダーを追加するには

httpPost.addHeader("key","value");
于 2014-06-03T09:46:35.803 に答える