web-dev-qa-db-ja.com

「HTTPエラー411。リクエストはチャンク化されているか、コンテンツの長さが必要です。」を解決する方法。 in java

HttpConnectを使用していて、サーバーからトークンを取得しようとしています。しかし、私が応答を得ようとすると、コンテンツの長さをさまざまな方法で設定しようとしても、コンテンツの長さを設定したり問題が発生したりしていないと常に言われます

conn = (HttpURLConnection) new URL(url).openConnection();
conn.setRequestMethod(method);
conn.setRequestProperty("X-DocuSign-Authentication", httpAuthHeader);
conn.setRequestProperty("Accept", "application/json");
if (method.equalsIgnoreCase("POST")) {
  conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
  conn.setRequestProperty("Content-Length", Integer.toString(body.length()));
            conn.setDoOutput(true);
}


status = conn.getResponseCode(); // triggers the request
if (status != 200) { //// 200 = OK 
    errorParse(conn, status);
    return;
}

InputStream is = conn.getInputStream();
6
Aniruddha Das

HttpConnectからHttpClientへの移行は私にとってはうまくいきました。そこで、HttpURLConnectionから離れて、http HttpClientオブジェクトを作成し、executeメソッドを呼び出してサーバーからデータを取得しました。

以下は、HttpClientではなくHttpURLConnectionを使用してhttpリクエストを行うコードです。

try {
  HttpClient httpclient = new DefaultHttpClient();
  HttpPost httpPost = new HttpPost(authUrl);
  String json = "";
  JSONObject jsonObject = new JSONObject();
  jsonObject.accumulate("phone", "phone");
  json = jsonObject.toString();
  StringEntity se = new StringEntity(json);
  httpPost.setEntity(se);

  httpPost.addHeader("Accept", "application/json");
  httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded");

  HttpResponse httpResponse = httpclient.execute(httpPost);

  // 9. receive response as inputStream
  inputStream = httpResponse.getEntity().getContent();
  String response = getResponseBody(inputStream);

  System.out.println(response);

} catch (ClientProtocolException e) {
  System.out.println("ClientProtocolException : " + e.getLocalizedMessage());
} catch (IOException e) {
  System.out.println("IOException:" + e.getLocalizedMessage());
} catch (Exception e) {
  System.out.println("Exception:" + e.getLocalizedMessage());
}
0
Aniruddha Das

コンテンツの長さを設定していますが、リクエスト本文を送信していません。

しないでくださいコンテンツの長さを設定します。 Javaはあなたのためにそれをします。

NB setDoOutput(true)はメソッドをPOSTに設定します。

0
user207421