HttpPost -> Redirect -> Требуется местоположение или тело ответа - PullRequest
1 голос
/ 04 ноября 2011

Вот код Java, который отправляет данные на веб-сайт и перенаправляется в ответ (статус 302). Он отлично работает на моем ПК (Eclipse, Java, Ubuntu), он делает именно то, что я хочу.

Я пытался опубликовать все функции кода, но просто не могу.

Java-код:

// Preparing the CLIENT and POST Method
  HttpClient httpclient = new DefaultHttpClient();
  HttpPost httppost = new HttpPost("http://na.leagueoflegends.com/ladders/solo-5x5");

  try {
     // Add your POST METHOD attributes
     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
     nameValuePairs.add(new BasicNameValuePair("op", "Search"));
     nameValuePairs.add(new BasicNameValuePair("player", "Jaiybe"));
     nameValuePairs.add(new BasicNameValuePair("ladder_id", "3"));
     nameValuePairs.add(new BasicNameValuePair("form_build_id",
           "form-526370b788622996caa3669e7b975ccf"));
     nameValuePairs.add(new BasicNameValuePair("form_id",
           "ladders_filter_form"));
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

     // Execute HTTP Post Request
     HttpResponse response = httpclient.execute(httppost);

     // RESPONE THAT WORKS WITH JAVA
     System.out.println("Location:");
     String LocationHeader = response.getFirstHeader("location").getValue();
     System.out.println(LocationHeader);
     System.out.println();

     // To get the BODY I would have to parse that again - since its not REDIRECTING automatically
     HttpClient httpclient2 = new DefaultHttpClient();
     HttpPost httppost2 = new HttpPost(LocationHeader);
     response = httpclient2.execute(httppost2);
     System.out.println("And EVEN the response body:");
     System.out.println(EntityUtils.toString(response.getEntity()));

Код делает:

  1. Сообщения
  2. Получает перенаправление - получает заголовок местоположения
  3. Разбирает местоположение

И мне нужен андроид, чтобы сделать то же самое. Либо "Локация", либо тело ответа, все в порядке, мне оба не нужны.

Должность: http://www.anddev.org/networking-database-problems-f29/httppost-clientprotocolexception-t56118.html

Ответы [ 3 ]

2 голосов
/ 08 ноября 2011

Я нашел проблему!

httpclient.getParams().setParameter("http.protocol.version",
                HttpVersion.HTTP_1_0);

Просто изменив эту строку - версия 1_0 работает, а 1_1 - нет. Не спрашивай меня почему :) 1004 *

Спасибо всем!

2 голосов
/ 14 июня 2012

Пожалуйста, попробуйте следующий код.Местоположение в шапке отсутствует, поскольку страница уже перенаправлена.Таким образом, мы можем отключить перенаправление, чтобы получить тег местоположения.

httpclient.getParams().setParameter(ClientPNames.HANDLE_REDIRECTS, false);
0 голосов
/ 05 ноября 2011

Попробуйте позвонить после создания http-клиента, чтобы он следовал вашему перенаправлению

httpclient.getParams().setParameter("http.protocol.allow-circular-redirects", true);
...