HTTP / 1.1 302 Найдено - в Android после httpPost - PullRequest
0 голосов
/ 02 августа 2011

после выполнения метода post на сервере я получаю эту ошибку: HTTP / 1.1 302 Found, которая, как я знаю, утверждает, что существует перенаправление, которое следует. Я пытаюсь заполнить форму входа и отправить ее на сервер, после этого я получаю это перенаправление.

P.S. Метод отправки формы - postback. Может, это ключ?

P.P.S. После публикации:

__VIEWSTATE=&__EVENTTARGET=&__EVENTARGUMENT=&ctl00$tbUsername=qwerty&ctl00$tbPwd=qwerty&ctl00$chkRememberLogin=0&ctl00$cmdLogin=Login&ctl00$cmdForgetMe=Forget Me

Я понял:

<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="http://website/mobile/(X(1)S(lyslolvcdq13af45juum2vel))/Login.aspx?ReturnUrl=%2fsyspower3%2fmobile%2fdefault.aspx&amp;AspxAutoDetectCookieSupport=1">here</a>.</h2>
</body></html>

Плюс набор заголовков:

08-02 13:48:39.084: INFO/System.out(1853): ====Header=====
08-02 13:48:39.084: INFO/System.out(1853): Cache-Control
08-02 13:48:39.084: INFO/System.out(1853): private
08-02 13:48:39.084: INFO/System.out(1853): ====Header=====
08-02 13:48:39.084: INFO/System.out(1853): Content-Type
08-02 13:48:39.084: INFO/System.out(1853): text/html; charset=utf-8
08-02 13:48:39.093: INFO/System.out(1853): ====Header=====
08-02 13:48:39.093: INFO/System.out(1853): Expires
08-02 13:48:39.093: INFO/System.out(1853): Tue, 02 Aug 2011 13:48:33 GMT
08-02 13:48:39.093: INFO/System.out(1853): ====Header=====
08-02 13:48:39.093: INFO/System.out(1853): Server
08-02 13:48:39.093: INFO/System.out(1853): Microsoft-IIS/7.5
08-02 13:48:39.093: INFO/System.out(1853): ====Header=====
08-02 13:48:39.093: INFO/System.out(1853): Set-Cookie
08-02 13:48:39.093: INFO/System.out(1853): ASP.NET_SessionId=ebmsrf45wb3mcq45qrgrfe55; path=/; HttpOnly
08-02 13:48:39.093: INFO/System.out(1853): ====Header=====
08-02 13:48:39.104: INFO/System.out(1853): X-AspNet-Version
08-02 13:48:39.104: INFO/System.out(1853): 2.0.50727
08-02 13:48:39.104: INFO/System.out(1853): ====Header=====
08-02 13:48:39.104: INFO/System.out(1853): X-Powered-By
08-02 13:48:39.104: INFO/System.out(1853): ASP.NET
08-02 13:48:39.104: INFO/System.out(1853): ====Header=====
08-02 13:48:39.104: INFO/System.out(1853): Date
08-02 13:48:39.104: INFO/System.out(1853): Tue, 02 Aug 2011 13:48:33 GMT
08-02 13:48:39.104: INFO/System.out(1853): ====Header=====
08-02 13:48:39.104: INFO/System.out(1853): Content-Length
08-02 13:48:39.104: INFO/System.out(1853): 1272

EDITED : Теперь я могу видеть новое местоположение, к которому я должен приступить. Но здесь возникает новая проблема: когда я ввожу эту новую ссылку в браузер, я попадаю на сервер (я передаю логин), но если я делаю новый запрос (POST) к серверу, то меня отбрасывают обратно к логину страница ...

P.S. Теперь я использую HttpURLConnection для метода записи

Ответы [ 2 ]

2 голосов
/ 02 августа 2011

Это не ошибка.Это просто неофициальное сообщение, что есть перенаправление.Только HTTP 4nn и 5nn отклики являются реальными ошибками.URL перенаправления доступен в заголовке HTTP Location.Вы, как веб-клиент, обязаны отправить новый запрос GET по URL-адресу, указанному в заголовке HTTP Location.

String location = response.getLastHeader("Location").getValue();
// ...

Обновление :, вы получили ответ HTTP 302 без заголовка Location?Какой код состояния самого ответа?

int statusCode = response.getStatusLine().getStatusCode();

Если это 200, а тело содержит сообщение 302, то это определенно ошибка на стороне сервера.Веб-сервер должен был вернуть код состояния 302 вместе с заголовком Location.


Обновление 2 : Итак, код состояния на самом деле равен 200. Это ошибка на стороне сервера.Если этот веб-сайт не находится под вашим контролем и, следовательно, вы не можете починить сервер, вам необходимо сообщить об этом администратору / сопровождающему веб-сайта.Между тем, лучшее, что вы могли бы сделать, - это извлечь новое местоположение из тела ответа, используя некоторый HTML-анализатор, а затем отправить ему новый запрос GET.Например, используя Jsoup :

String location = Jsoup.parse(responseHtml).select("h2 a").first().attr("href");
// ...
0 голосов
/ 02 августа 2011

Код 302 не считается ошибкой.Это инструкция для клиента о том, что он должен перейти к месту, указанному в заголовке ответа Location.Клиент должен следовать этой директиве и перейти к указанному местоположению.

Поскольку этот сервер не возвращает Location, похоже, вам придется проанализировать тело ответа и следовать указанному там URL-адресу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...