MultipartEntity没有创建好的请求

时间:2011-03-29 15:22:25

标签: android http-post multipartentity

我需要将一些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?

3 个答案:

答案 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);
}