Почему я получаю Http / 1.1 400 Bad запрос? - PullRequest
8 голосов
/ 04 апреля 2011

Вот фрагмент моего кода. Я пытаюсь войти на сайт, используя HTTPOST. Я продолжаю получать "400 Bad Request" Я пробовал различные комбинации. Я попытался передать имя пользователя / пароль в качестве заголовка вместо NameValuePair. Но результат тот же. Есть что-то, чего мне не хватает?

HttpClient httpclient = new DefaultHttpClient();

HttpPost post = new HttpPost("https://identi.ca/main/login");


List <NameValuePair> nvps = new ArrayList <NameValuePair>();
nvps.add(new BasicNameValuePair("nickname", u));
nvps.add(new BasicNameValuePair("password", p));
nvps.add(new BasicNameValuePair("submit", "Login"));

post.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));

HttpResponse response = httpclient.execute(post);
HttpEntity entity = response.getEntity();

Log.i("Login form POST result: ", response.getStatusLine().toString());

Спасибо за помощь.

Ответы [ 2 ]

7 голосов
/ 04 апреля 2011

Служба HTTP отправит ответ 400, если считает, что вы отправили неверный / неправильный / неуместный. Из вашего кода невозможно определить, какими будут фактические отправленные аргументы или (что более важно), что сервер ожидает от вас.

Для диагностики вам необходимо:

  • выясните, что на самом деле отправляет ваш код, и
  • выясните, что сервер ожидает от вас.

Второй может включать в себя:

  • просматривая веб-страницы, которые обычный пользователь с веб-браузером использует для выполнения запроса,
  • просматривая текст ответа 400, который вы получаете от сервера,
  • просмотр журналов сервера и / или
  • просмотр документации веб-API сервера (или исходного кода).

В этом случае, похоже, есть дополнительный параметр token, который необходимо указать.

Тем не менее, я подозреваю, что вы, возможно, используете неправильный подход полностью. Сайт "identi.ca" использует StatusNet, который имеет пару опубликованных API для клиентов. Там нет упоминания о том, что я говорил с URL-адресом для входа в систему, который я мог видеть.

6 голосов
/ 04 апреля 2011

Глядя на источник для этой страницы входа, есть скрытое поле с именем token, которое вам, вероятно, придется вернуть на сервер. Сначала вам нужно ПОЛУЧИТЬ содержимое этой страницы, извлечь значение токена и включить его в свой ответ POST.

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