如何在 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());
}
我正在使用 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
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());
}