PDA

Просмотр полной версии : Indy 10 - проблема


mailbrush
24.07.2009, 19:35
Вобщем надо авторизироваться на wap.odnoklassniki.ru. В опере все норм.

Отправляет заголовки:
POST /dk?st_id=login&tkn=1247 HTTP/1.1
User-Agent: Opera/9.52 (Windows NT 5.1; U; en)
Host: mg2.odnoklassniki.ru
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: ru-RU,ru;q=0.9,en;q=0.8
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Referer: http://wap.odnoklassniki.ru/dk?st_id=main&tkn=1321
Connection: Keep-Alive
Content-Length: 98
Content-Type: application/x-www-form-urlencoded

fr_button=on&fr_email=agakamran%40mail.ru&fr_password=7646037&fr_go=%D0%92%D0%BE%D0%B9%D1%82%D0%B8

Получает заголовки:
HTTP/1.1 302 Found
Server: Resin/2.1.16
Cache-Control: private
Location: http://mg2.odnoklassniki.ru/dk;jsessionid=a9fQlIQnP909?st_id=userMain&tkn=7251
Set-Cookie: JSESSIONID=a9fQlIQnP909; path=/
Content-Length: 116
Connection: close
Date: Fri, 24 Jul 2009 15:23:35 GMT

Дальше есс-но редиректит, отправляя заголовки:GET /dk;jsessionid=a9fQlIQnP909?st_id=userMain&tkn=7251 HTTP/1.1
User-Agent: Opera/9.52 (Windows NT 5.1; U; en)
Host: mg2.odnoklassniki.ru
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: ru-RU,ru;q=0.9,en;q=0.8
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Referer: http://wap.odnoklassniki.ru/dk?st_id=main&tkn=1321
Cookie: JSESSIONID=a9fQlIQnP909
Cookie2: $Version=1
Connection: Keep-Alive, TE
TE: deflate, gzip, chunked, identity, trailers


Получает заголовки:
HTTP/1.1 200 OK
Server: Resin/2.1.16
Last-Modified: Tue, 04 Dec 2050 11:03:49 GMT
Pragma: no-cache
Cache-Control: no-cache, must-revalidate
Content-Type: text/html;charset=UTF-8
Connection: close
Transfer-Encoding: chunked
Date: Fri, 24 Jul 2009 15:23:38 GMT

Ну и тело тоже...

Через инди - не хочет.

Отправляет заголовки:
POST /dk?st_id=login&tkn=7844 HTTP/1.0
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 117
Connection: Keep-Alive, TE
TE: deflate, gzip, chunked, identity, trailers
Host: wap.odnoklassniki.ru
Accept: text/html, */*
Accept-Encoding: identity
User-Agent: Mozilla/3.0 (compatible; Indy Library)

fr_button=ons&fr_email=agakamran@mail.ru&fr_password=7646037&fr_go=%25D0%2592%25D0%25BE%25D0%25B9%25D1%2582%25D 0%25B8

Получает заголовки:HTTP/1.0 302 Found
Server: Resin/2.1.16
Cache-Control: no-cache
Location: http://wap.odnoklassniki.ru/dk;jsessionid=akkkZlcCROtb?st_id=userMain&tkn=4654
Expires: Thu, 01 Dec 1994 16:00:00 GMT
Set-Cookie: JSESSIONID=akkkZlcCROtb; path=/
Content-Length: 116
Date: Fri, 24 Jul 2009 15:32:16 GMTРедиректит, отправляя заголовки: POST /dk;jsessionid=akkkZlcCROtb?st_id=userMain&tkn=4654 HTTP/1.0
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 117
Connection: Keep-Alive, TE
TE: deflate, gzip, chunked, identity, trailers
Host: wap.odnoklassniki.ru
Accept: text/html, */*
Accept-Encoding: identity
User-Agent: Mozilla/3.0 (compatible; Indy Library)
Cookie: JSESSIONID=akkkZlcCROtb

fr_button=ons&fr_email=agakamran@mail.ru&fr_password=7646037&fr_go=%25D0%2592%25D0%25BE%25D0%25B9%25D1%2582%25D 0%25B8Но получает ошибку №400 Bad Request. HTTP/1.0 400 Bad Request
Server: Resin/2.1.16
Cache-Control: no-cache
Expires: Thu, 01 Dec 1994 16:00:00 GMT
Set-Cookie: JSESSIONID=; expires=Thu, 01-Dec-1994 16:00:00 GMT
Set-Cookie: AUTHCODE=; domain=.odnoklassniki.ru; path=/; expires=Thu, 01-Dec-1994 16:00:00 GMT
Content-Type: text/html
Content-Length: 135
Date: Fri, 24 Jul 2009 15:32:19 GMT
После этого еррормесадж - 400...

HandleRedirects стоит true.

Собственно, почему?
Прошу помощи...

Kaimi
24.07.2009, 19:39
А зачем через инди слать 2 раза запрос на авторизацию, причем второй раз почему то к /dk;jsessionid=akkkZlcCROtb?st_id=userMain&tkn=4654

mailbrush
24.07.2009, 19:44
В опере все ок - сначала отправляются заголовки, опера получает куки, с которыми гетом открывает страничку...

А вот инди почему-то постом её открывает, хотя у меня идет всего один пост-запрос, и никаких гетов: PostData:=TStringList.Create;
PostData.Add('fr_button=ons');
PostData.Add('fr_email='+RegExp1.Match[1]);
PostData.Add('fr_password='+RegExp1.Match[2]);
PostData.Add('fr_go=%D0%92%D0%BE%D0%B9%D1%82%D0%B8 ');
IdHTTP1.Post('http://wap.odnoklassniki.ru/dk?st_id=login&tkn=7844',PostData);

Kaimi
24.07.2009, 19:52
Так убери HandleRedirects и обрабатывай редирект самостоятельно

mailbrush
24.07.2009, 19:59
Убираю HandleRedirects - выскакивает 302 ошибка...

Kaimi
24.07.2009, 20:12
Почему ошибка то, это редирект, который ты должен обработать.
Если он выскакивает в виде исключения, то пиши запрос в try catch

mailbrush
24.07.2009, 20:19
Почему ошибка тоА вот этого я не знаю :(...

[n]-c0der
25.07.2009, 04:46
try except, try finally, try ti_idiot
Прежде чем кодить, почитай немного литературы...
Вылетает эксепшен, и то под дебагером...а с помощью выше описанных функций ты сможешь обойти это! Ололо

Chrome~
25.07.2009, 14:28
Ты что то неправильно делаешь. Я с Indy не работал, поэтому сразу не могу сказать, как правильно делать.

В общем твоя программа не правильно начинает отправлять заголовки, начиная от редиректа. Опера отправляет GET-запрос, а твоя программа POST-запрос, да и еще добавляет переменные к телу от предыдущего запроса.

Выложи сюда проект, посмотрим, что можно сделать. А еще для таких программ (и вообще любых других, которые работают с сетью) советую использовать Winsock.

ZdezBilYa
25.07.2009, 16:56
А вот инди почему-то постом её открывает, хотя у меня идет всего один пост-запрос, и никаких гетов: PostData:=TStringList.Create;
PostData.Add('fr_button=ons');
PostData.Add('fr_email='+RegExp1.Match[1]);
PostData.Add('fr_password='+RegExp1.Match[2]);
PostData.Add('fr_go=%D0%92%D0%BE%D0%B9%D1%82%D0%B8 ');
IdHTTP1.Post('http://wap.odnoklassniki.ru/dk?st_id=login&tkn=7844',PostData);


1. PostData.Add('fr_go=%D0%92%D0%BE%D0%B9%D1%82%D0%B8 ');
можно написать просто
PostData.Add('fr_go=Войти');
Во всяком случае, у меня так нормально работает. Ну это так, совет чисто для удобства))
2. IdHTTP1.Post('http://wap.odnoklassniki.ru/dk?st_id=login&tkn=7844',PostData);

ссылку, куда посылать POST-запрос нужно парсить с предыдущей страницы.
т.е. сначала делаем Get-запрос:
StrPage:=IdHTTP1.Get('http://wap.odnoklassniki.ru/');
затем парсим StrPage и ищем ссылку вида http://wap.odnoklassniki.ru/dk?st_id=login&tkn=7844, где число в конце меняется каждый раз (именно поэтому и надо парсить).
Затем заголовки делаю такие:

IdHTTP1.Request.UserAgent:='Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.2.15 Version/10.00';
IdHTTP1.Request.Accept:='text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1';
IdHTTP1.Request.AcceptLanguage:='ru,ru-RU;q=0.9,en;q=0.8';
IdHTTP1.Request.AcceptCharSet:='iso-8859-1, utf-8, utf-16, *;q=0.1';
IdHTTP1.Request.AcceptEncoding:='deflate, gzip, x-gzip, identity, *;q=0';
IdHTTP1.Request.ContentType: application/x-www-form-urlencoded;
Ну и POST-запрос после этого уже делаешь.

HandleRedirects включен
CookieManager подключен
Всё работает