Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 454

/ вопрос открыт /

Приветствую, уважаемые эксперты!

Проблема с куками?
немогу выдернуть страничку с сайта love.mail.ru

POST запросом выдергивает главную станичку, а вот следующий get запрос не работает?

Пытался принудительно запихнуть куки...не получается!???

Приложение:
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3. tmpParams:TStringList;
  4. s,p,cookies:string;
  5. p1,p2, i:integer;
  6. begin
  7. application.ProcessMessages;
  8.  
  9. idHTTP1.get('http://love.mail.ru');
  10. cookies:=idhttp1.Response.RawHeaders.CommaText;
  11. p1:=pos('s=',cookies)+2;
  12. p2:=pos('; p',cookies);
  13. s:=copy(cookies,p1,p2-p1);
  14. Label1.Caption:=s;
  15.  
  16.  
  17. idHTTP1.get('http://r.mail.ru/cgi-bin/banners/js/1968?336');
  18. cookies:=idhttp1.Response.RawHeaders.CommaText;
  19. p1:=pos('p=',cookies);
  20. p2:=pos('; ',cookies);
  21. p:=copy(cookies,p1,p2-p1);
  22. showmessage(p);
  23.  
  24.  
  25.  
  26.  
  27. //idHTTP1.Request.ContentType:='application/x-www-form-urlencoded';
  28. //idhttp1.Request.CustomHeaders.Text:='Cookies: s='+s+'; LOGIN=t1234; ';
  29. tmpParams:=TStringList.Create;
  30. tmpParams.Add('oid=0');
  31. tmpParams.Add('photo_oid=0');
  32. tmpParams.Add('login_action=login');
  33. tmpParams.Add('sold='+s);
  34. tmpParams.Add('login=t1234');
  35. tmpParams.Add('password=123456');
  36.  
  37.  
  38. memo2.Text:=idhttp1.Post('http://love.mail.ru/my/index.phtml',tmpParams);
  39. memo1.Lines.SaveToFile('html.html');
  40.  
  41. memo2.Text:=idHTTP1.Get('http://love.mail.ru/my/messages.phtml?rand=12345');
  42. showmessage(idhttp1.Response.RawHeaders.CommaText);
  43. memo2.Lines.SaveToFile('html2.html');
  44. memo2.Clear;
  45.  
  46. for i:=0 to IdCookieManager.cookieCollection.count-1 do
  47. memo2.lines.add(IdCookieManager.cookieCollection.items[i].cookieText);
  48. exit;
  49.  
  50. end;
  51.  
  52.  


Cool Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Cool (статус: Посетитель)
Вопрос отправлен: 28 марта 2008, 13:55
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, Cool!
Первое: свойство AllowCookies установлено в true? если да, то все манипуляции с передиранием кукисов уже не нужны будут.
Второе:если используется IdCookieManager, то это позволит иметь "общие куки" для несколькоих компонентов idHTTP.
Третье: В Request параметрах есть UserAgent. по умолчанию он выставлен в "Mozilla/3.0 (compatible; Indy Library)". А гугл к примеру в таком случае выдаёт совершенно другой текст. Рекомендую выставить там что то более вменяемое, взять можно здесь http://ru.wikipedia.org/wiki/User_Agent

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 28 марта 2008, 17:31
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 6; последнее сообщение — 29 марта 2008, 12:46; участников в обсуждении: 2.
Cool

Cool (статус: Посетитель), 28 марта 2008, 18:24 [#1]:

AllowCookies=true!

Если не выдерать параметр s, тогда не поститься (post)!

Просканировал снифером вставил в UserAgent:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRA 5.0 (build 02094); MRSPUTNIK 2, 0, 0, 20 SW)

общий код такой:

idHTTP1.get('http://love.mail.ru');
cookies:=idhttp1.Response.RawHeaders.CommaText;
p1:=pos('s=',cookies)+2;
p2:=pos('; p',cookies);
s:=copy(cookies,p1,p2-p1);
{
idHTTP1.get('http://r.mail.ru/cgi-bin/banners/js/1968?336');
cookies:=idhttp1.Response.RawHeaders.CommaText;
p1:=pos('p=',cookies);
p2:=pos('; ',cookies);
p:=copy(cookies,p1,p2-p1);
showmessage(p);
}
tmpParams:=TStringList.Create;
tmpParams.Add('oid=0');
tmpParams.Add('photo_oid=0');
tmpParams.Add('login_action=login');
tmpParams.Add('sold='+s);
tmpParams.Add('login=t1234');
tmpParams.Add('password=123456');

memo1.Text:=idhttp1.Post('http://love.mail.ru/my/login.phtml',tmpParams);
memo1.Lines.SaveToFile('html.html');

memo2.Text:=idHTTP1.Get('http://love.mail.ru/my/messages.phtml?rand=12345');
showmessage(idhttp1.Response.RawHeaders.CommaText);
memo2.Lines.SaveToFile('html2.html');
memo2.Clear;

for i:=0 to IdCookieManager.cookieCollection.count-1 do
memo2.lines.add(IdCookieManager.cookieCollection.items[i].cookieText);
exit;
примчем в IdCookieManager нет ничего, а если делаешь обращение к
http://r.mail.ru/cgi-bin/banners/js/1968?336 выдераешь параметр "p", тода в IdCookieManager есть один "p", a где "s" ??..??

Там много java скриптов они могут влиять на работоспособноть кукисов?
Вадим К

Вадим К (статус: Академик), 28 марта 2008, 21:23 [#2]:

java скрипты естественно могут влиять на количество кукисов.

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

Зная, как работают подобные системы изнутри, могу сказать, что часто защита стоиться на безумных условиях. Например, броузер обязан запросить картинку с размерами 1 на 1, которая всё равно не будет видна, но ему не выставиться нужный кукис или переменная в сесии и никуда дальше не пустит.
В подобных случаях часто выручает FireFox с плагином Live HTTP. Он позволяет посмотреть в удобной форме все запросы.
Для начала рекомендую иммитировать броузер полностью - то есть, качать все картинки и подобное. Потом будет видно, что можно убрать.

ВНИМАНИЕ!
Написание подобного софта может конфликтовать с законодательством. И даже если у вас на уме нет ничего противозаконного, ваши действия могут классифицироваться как "вмешательство в работу электронных систем" или "использование в целях, не предусмотренных разработчиком". Будьте осторожны.
Галочка "подтверждения прочтения" - вселенское зло.
Cool

Cool (статус: Посетитель), 29 марта 2008, 05:27 [#3]:

Можт вы посмотрите в чем проблема зайдя на сайт love.mail.ru -> войти -> t1234, 123456 -> мои сообщения?
Cool

Cool (статус: Посетитель), 29 марта 2008, 05:51 [#4]:

Вот сделал специальный запрос:

IdHTTP1.Request.Host:='love.mail.ru';
IdHTTP1.Request.UserAgent:='Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13';
IdHTTP1.Request.Accept:='text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5';
IdHTTP1.Request.AcceptLanguage:='ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3';
IdHTTP1.Request.AcceptEncoding:='gzip,deflate';
IdHTTP1.Request.AcceptCharSet:='windows-1251,utf-8;q=0.7,*;q=0.7';
IdHTTP1.Request.Referer:='http://love.mail.ru/my/';
IdHTTP1.Request.CustomHeaders.Text:='Cookies: '+
's=_zoW4lXTABx37OC9hHqGb2D6x3aqmRfF;'+
'p=7NdXADr/RAAA; c56=mOL2RwAAAAICAQIAAAAAAgH4AQAAAAAA;'+
'TIMEZONE_UPDATE=1206757398;'+
'LOGIN=t1234';
memo1.Text:=idHTTP1.Get('http://love.mail.ru/my/messages.phtml?rand=12345');
showmessage(idhttp1.Response.RawHeaders.CommaText);

memo1.Lines.SaveToFile('html.html');

for i:=0 to IdCookieManager.cookieCollection.count-1 do
memo2.lines.add(IdCookieManager.cookieCollection.items[i].cookieText);

приходит в meno1 = "‹"

строку убераешь IdHTTP1.Request.AcceptEncoding:='gzip,deflate'; приходит станичка с авторизацией!

в Live HTTP выдрал:
GET /my/messages.phtml?rand=12345 HTTP/1.1
Host: love.mail.ru
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://love.mail.ru/my/
Cookie: s=_zoW4lXTABx37OC9hHqGb2D6x3aqmRfF; p=7NdXADr/RAAA; c56=mOL2RwAAAAICAQIAAAAAAgH4AQAAAAAA; TIMEZONE_UPDATE=1206757398; LOGIN=t1234
Cool

Cool (статус: Посетитель), 29 марта 2008, 07:02 [#5]:

1 час с утра заменяет 3 часа ночью!
Всё ок! Разабрался в хитрой схеме!...
Вадим К

Вадим К (статус: Академик), 29 марта 2008, 12:46 [#6]:

если в запросе есть Accept-Encoding: gzip,deflate, то это значит, что броузер может приниметь как заархивированный контент, так и нет. Так как сервера часто могут отдавать заархивированым, то вы с этим и столкнулись.
Кстати, если в Get запросе написать HTTP/1.0, тогда сжатия не будет, но не ведомо мне, не нарушит ли сервер это правило, увидев запись Accept-Encoding: gzip,deflate
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 29 июня 2017, 17:06
Выполнено за 0.03 сек.
Рейтинг@Mail.ru