开发者

MultipartEntity not creating good request

I needed to send some XML to a webservices and I was able to do it with a normal StringEntity because it was just text but now I need to attach an image to it as well. I tried doing it with a MultipartEntity but I couldn't get it working with just the XML.

// Working

DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httppost doc = new HttpPost("http://mywebservices.com");

HttpEntity entity = new StringEntity(writer.toString());
httppost.setEntity(entity);

HttpResponse respon开发者_如何学Pythonse = httpclient.execute(httppost);
HttpEntity responseEntity = response.getEntity();

// not working

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();

And is there a way I could see the MIME that is being send?


You simply forgot:

httppost.setEntity(entity);

By the way, it's probably good form to set the Content-Type of your parts, e.g.:

entity.addPart("xml", new StringBody(writer.toString(),"application/xml",Charset.forName("UTF-8")));

As far as seeing what's being sent, see http://hc.apache.org/httpcomponents-client-ga/logging.html (especially "wire logging") for the HttpClient logging features, and this question for how to get it working on Android.


Another way to see what's being sent is to set up your own "server" to receive the request. You can do this on a Unix-like system with netcat. The command-line

nc -l 1234

starts a server listening on port 1234, and will echo whatever is received.

If that "server" is on a machine 10.1.2.3, you can just use a new HttpPost("http://10.1.2.3:1234") to send the message there.


I have a similar problem but I'm sending the multipart with user/pass to a acegi security system, it works with this:

request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));

But not with this:

try {   
    for (NameValuePair param : params) {
        multientity.addPart(param.getName(), new StringBody(param.getValue(),      Charset.forName(encoding))));
    }
    request.setEntity(multientity);
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜