我有一个发送HTTP POST的简单程序。
如果行httpost.addheader("Content-Length","18")
不,则仅。否则它会失败。在代码中,它是“--->”的行
评论这一行会使POST成功。
如果该行在代码中并且返回协议异常错误,则Android不会发送POST。我使用Wireshark验证没有发送任何内容。
为什么设置Content-Length会产生异常?
代码:
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://test.com/a_post.php");
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
// DATA
nameValuePairs.add(new BasicNameValuePair("mydata", "abcde"));
nameValuePairs.add(new BasicNameValuePair("id","29"));
StringEntity se = new UrlEncodedFormEntity(nameValuePairs);
httppost.setEntity(se);
int seLength = (int) se.getContentLength();
String seLengthStr = Integer.toString(seLength);
httppost.addHeader("Content-Type","application/x-www-form-urlencoded");
----> httppost.addHeader("Content-Length", "18");
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String httpResponse=httpclient.execute(httppost, responseHandler);
responseV.setText(responseV.getText()+ " " + httpResponse);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
答案 0 :(得分:1)
你确定内容长度恰好是18吗?我的猜测是,如果代码意识到设置的内容长度不正确,则请求不会完成,因为发送内容长度无效的请求将(至少应该)导致服务器上的错误。
如果省略内容长度,很可能会在需要时自动添加。
答案 1 :(得分:0)
在许多情况下,HTTP客户端和服务器必须不发送Content-Length
标头。通常不需要,包括连接的另一端是否支持HTTP / 1.1。最好只保留该标头,让HTTP客户端/服务器库处理是否添加标头的逻辑。