MultipartEntity не создает хороший запрос - PullRequest
0 голосов
/ 29 марта 2011

Мне нужно было отправить XML на веб-сервисы, и я смог сделать это с обычным 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 ]

4 голосов
/ 29 марта 2011

Вы просто забыли:

httppost.setEntity(entity);

Кстати, это, вероятно, хорошая форма для установки Content-Type ваших деталей, например ::

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

Что касается того, что отправляется, см. http://hc.apache.org/httpcomponents-client-ga/logging.html (особенно "регистрация по проводам") для функций ведения журнала HttpClient, и этот вопрос о том, как заставить его работать на Android.

1 голос
/ 31 марта 2011

Еще один способ увидеть, что отправляется, - это настроить свой собственный «сервер» для получения запроса. Вы можете сделать это в Unix-подобной системе с помощью netcat. Командная строка

nc -l 1234

запускает сервер, прослушивающий порт 1234, и отображает все, что получено.

Если этот «сервер» находится на машине 10.1.2.3, вы можете просто использовать new HttpPost("http://10.1.2.3:1234") для отправки сообщения туда.

0 голосов
/ 19 мая 2011

У меня похожая проблема, но я отправляю multipart с пользователем / pass в систему безопасности 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);
}
...