下面是我的代码,它执行POST请求登录网站。当我运行相同的时候,我收到消息响应为411.有人可以帮我设置正确的内容长度吗?
try {
String request = "http://<domain.com>/login";
URL url = new URL(request);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.setInstanceFollowRedirects(false);
connection.setRequestProperty("Content-Length", "1");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("email", "abc");
connection.setRequestProperty("password", "xyz");
connection.setDoOutput(true);
connection.setRequestMethod("POST");
int code = connection.getResponseCode();
System.out.println("Response Code of the object is " +code);
if(code == 200)
System.out.println("OK");
connection.disconnect();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
答案 0 :(得分:2)
好的 - 您没有将任何内容移动到请求正文中,因此您应将长度设置为“0”。
添加:
connection.connect();
后:
connection.setRequestMethod( “POST”);
google“httpurlconnection post parameters”,用于向POST请求添加参数。该网站至少有四到五个解决方案。
答案 1 :(得分:0)
我面临着同样的问题。我试图发送带有空主体的POST请求,但该请求被服务器拒绝,返回411。
然后我在'sun.net.www.protocol.http.HttpURLConnection'中找到了以下代码,它是'java.net.HttpURLConnection'的实现:
private static final String[] restrictedHeaders = new String[]{"Access-Control-Request-Headers", "Access-Control-Request-Method", "Connection", "Content-Length", "Content-Transfer-Encoding", "Host", "Keep-Alive", "Origin", "Trailer", "Transfer-Encoding", "Upgrade", "Via"};
因此,当您通过sun.net.www.protocol.http.HttpURLConnection.setRequestProperty设置标题时,如果密钥包含在上面的数组中,它将被忽略。这就是为什么手动设置“ Content-Length”不起作用的原因。
答案 2 :(得分:0)
虽然答案可能为时已晚,但仅供参考。 我遇到了完全相同的问题,由于已经提到的原因,我一直遇到同样的错误。
我通过发送一个空的正文设法解决了这个问题:
conn.setDoOutput(true);
try (OutputStream os = conn.getOutputStream()) {
byte[] input = "".getBytes("utf-8");
os.write(input, 0, input.length);
}
这为我解决了问题。如前所述,手动设置 Content-Length 标头无济于事。