我创建了一个普通的HttpURLConnection对象。我设置了3个请求标头。
HttpURLConnection conn = (HttpURLConnection) someURL.openConnection();
conn.setDoInput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("User-Agent", "some_agent");
conn.setRequestProperty("Content-Type", "some_content-type");
conn.setRequestProperty("Content-Length", "some_content-length");
我查看设置的请求标头。
System.out.println(conn.getRequestProperties());
标题“Content-Length”永远不会包含在结果中。
{User-Agent=[some_agent], Content-Type=[some_content-type]}
如果我致电null
,我也会conn.getRequestProperty("Content-Length")
。
代码工作正常,但为什么“Content-Length”会消失?
答案 0 :(得分:4)
您无法设置内容长度;它是自动完成的。但是,如果事先知道内容长度,则可以使用setFixedLengthStreamingMode()
。
答案 1 :(得分:0)
您需要设置System.setProperty("sun.net.http.allowRestrictedHeaders", "true");
关于它的更多细节(类似问题): https://community.oracle.com/thread/1999694?tstart=0