我需要将一些XML发送到web服务,我能够使用普通的StringEntity来实现它,因为它只是文本,但现在我还需要附加一个图像。我尝试使用MultipartEntity,但我无法使用XML。
//工作
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httppost doc = new HttpPost("http://mywebservices.com");
HttpEntity entity = new StringEntity(writer.toString());
httppost.setEntity(entity);
HttpResponse response = httpclient.execute(httppost);
HttpEntity responseEntity = response.getEntity();
//无法正常工作
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httppost doc = new HttpPost("http://mywebservices.com");
// no difference when removing the BROWSER_COMPATIBLE
MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
entity.addPart("xml", new StringBody(writer.toString()));
httppost.setEntity(entity);
HttpResponse response = httpclient.execute(httppost);
HttpEntity responseEntity = response.getEntity();
有没有办法可以看到正在发送的MIME?
答案 0 :(得分:4)
你忘记了:
httppost.setEntity(entity);
顺便说一下,设置零件的内容类型可能是一种很好的形式,例如:
entity.addPart("xml", new StringBody(writer.toString(),"application/xml",Charset.forName("UTF-8")));
至于查看发送的内容,请参阅http://hc.apache.org/httpcomponents-client-ga/logging.html(特别是“wire logging”)了解HttpClient日志记录功能,以及 this question了解如何在Android上运行。
答案 1 :(得分:1)
查看发送内容的另一种方法是设置自己的“服务器”来接收请求。您可以在类似Unix的系统上使用netcat执行此操作。命令行
nc -l 1234
启动服务器侦听端口1234,并将回显收到的任何内容。
如果该“服务器”在机器10.1.2.3上,您可以使用new HttpPost("http://10.1.2.3:1234")
在那里发送消息。
答案 2 :(得分:0)
我遇到了类似的问题,但是我将带有user / pass的multipart发送到acegi安全系统,它适用于:
request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
但不是这样:
try {
for (NameValuePair param : params) {
multientity.addPart(param.getName(), new StringBody(param.getValue(), Charset.forName(encoding))));
}
request.setEntity(multientity);
}