如何在 java 中解析 "HTTP Error 411. The request must be chunked or have a content length."

How to resolve "HTTP Error 411. The request must be chunked or have a content length." 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();

您正在设置内容长度,但从未发送请求正文。

不要设置内容长度。 Java 为你做。

注意 setDoOutput(true) 将方法设置为 POST。

HttpConnect 转移到 HttpClient 对我有用。所以我离开 HttpURLConnection 并创建了一个 http HttpClient 对象并调用执行方法从服务器获取数据。

下面是使用 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());
}