Android HTTP POST Исключение длины содержимого - PullRequest
0 голосов
/ 29 сентября 2010

У меня есть простая программа, которая отправляет 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();
}

Ответы [ 2 ]

1 голос
/ 29 сентября 2010

Вы уверены, что длина контента ровно 18? Я предполагаю, что запрос не будет выполнен, если код поймет, что заданная длина содержимого неверна, так как отправка запроса с недопустимой длиной содержимого будет (по крайней мере, должна) вызвать ошибку на сервере.

Скорее всего, если вы опустите длину содержимого, он будет автоматически добавлен при необходимости.

0 голосов
/ 30 сентября 2010

Существует ряд условий, когда HTTP-клиенты и серверы должны , а не отправлять заголовок Content-Length.Это часто не требуется, в том числе если другая сторона соединения поддерживает HTTP / 1.1.Лучше всего просто оставить этот заголовок и позволить вашей клиентской / HTTP-библиотеке HTTP обрабатывать логику того, добавлять ли заголовок.

...