Авторизуйтесь на сайте с помощью HttpClient Post - PullRequest
3 голосов
/ 14 января 2010

Я пытаюсь создать программу, которая входит на сайт и выполняет некоторые автоматизированные действия. Я использую HttpClient 4.0.1 и использую это для начала: http://hc.apache.org/httpcomponents-client/primer.html.

На этом конкретном сайте файлы cookie устанавливаются не через заголовок «set-cookie», а в javascript.

Пока я не могу войти в систему.

Я пробовал следующие вещи:

  1. добавить заголовки вручную для всех заголовков запросов, которые появляются в firebug
   NameValuePair[] data = {
         new BasicNameValuePair("Host",host),
         new BasicNameValuePair("User-Agent"," Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7"),
         new BasicNameValuePair("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"),
         new BasicNameValuePair("Accept-Language","en-us,en;q=0.5"),
         new BasicNameValuePair("Accept-Encoding","gzip,deflate"),
         new BasicNameValuePair("Accept-Charset","ISO-8859-1,utf-8;q=0.7,*;q=0.7"),
         new BasicNameValuePair("Keep-Alive","300"),
         new BasicNameValuePair("Connection","keep-alive"),
         new BasicNameValuePair("Referer",referer),
         new BasicNameValuePair("Cookie",cookiestr)
   };

   for(NameValuePair pair : data){
      loginPost.addHeader(pair.getName(),pair.getValue());
   }

  1. создание BasicClientCookies и настройка с использованием setCookieStore. К сожалению, я не могу понять, как проверить, действительно ли отправляются файлы cookie. также есть ли способ проверить, какие другие автоматические параметры отправляются? (например, какой браузер эмулируется и т. д.).

Я получаю ответ: HTTP / 1.1 417 Ошибка ожидания

Я все еще новичок в этом вопросе, так кто-нибудь знает, что это за проблема? Если нет, я выложу более подробную информацию, код и сайт.

Ответы [ 3 ]

1 голос
/ 14 января 2010

Я бы повторил комментарий выше - используйте Wireshark, чтобы получить четкое представление о том, что отправляется с вашего клиента. Я только что отладил похожую проблему с Wireshark. Essential.

Если вы этого не сделали, я бы посоветовал изучить примеры в http://hc.apache.org/httpcomponents-client/examples.html, особенно в «Регистрации на основе форм».

Я бы не стал настраивать заголовки Http с помощью BasicNameValuePair, HttpClient должен дать вам основы. Измените далее с помощью HttpParams и HttpConnectionParams / HttpProtocolParams. В примере conn / ManagerConnectDirect показано, как изменить заголовки.

1 голос
/ 14 января 2010

Вам нужно WireShark или Скрипач . Первый - это сетевой анализатор (так что вы увидите, что происходит на очень низком уровне); второй действует как прокси - менее прозрачный, но более высокий уровень.

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

0 голосов
/ 14 января 2010

Вы можете использовать сетевую функцию FireBug, чтобы видеть, что происходит, когда вы входите в систему с помощью браузера. Таким образом, вы должны быть в состоянии выяснить, какой метод генерирует значение cookie и как его следует устанавливать (какой путь, name). Используйте это, чтобы самостоятельно установить cookie на HttpClient:

method.setRequestHeader("Cookie", "special-cookie=value");
...