Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Indy 10 - проблема (https://forum.antichat.xyz/showthread.php?t=131214)

mailbrush 24.07.2009 19:35

Indy 10 - проблема
 
Вобщем надо авторизироваться на 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%25D0%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%25D0%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

Цитата:

Сообщение от mailbrush
А вот инди почему-то постом её открывает, хотя у меня идет всего один пост-запрос, и никаких гетов:
Код:

      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 подключен
Всё работает


Время: 03:34