-
Как получить Cookies с сайта?
ВЫполняю .Get('http://........com');
Получаю первый Cookie в idcookiemanager.
Далее на странице выполняется html-код и устанавливается второй Cookie.
В TWebBrowser сценарий сайта выполняется, а вот в indy не получается.
Как мне получить второй Cookie через indy Или получить Cookies из TWebbrouser, для дальнейшего использования в indy? -
Медвежонок Пятачок © (18.09.09 15:48) [1]Далее на странице выполняется html-код и устанавливается второй Cookie.
Надо сделать тоже самое. -
> Надо сделать тоже самое.
Как это сделать попроще? )) -
Кстати WebBrowser1.OleObject.Document.cookie тоже возвращает только первый кук. А в C:\Documents and Settings\Admin\Cookies появляется два кука. Которые точно формируются этим сайтом и оба нужны
-
куки это не заранее забитые и передаваемые с сервера файлы, это место для сохранения локальных установок/параметров про которые сервер ничего не знает. и делаются они локальным скриптом (т.е. > с сайта? их не получить).
и кстати они вовсе не обязательны, т.е. типа загрузил страничку и вот они, нет, они могут появляться от действий юзера (ну например, работает сайт на схемах "по умолчанию", и никаких куков, а после юзер выбирает определенную схему и чтобы сохранить выбор создается "печенька" куда записывается выбранное), все зависит от программиста который сайт делал.
> Как это сделать попроще? ))
> возвращает только первый кук.
попросить юзера "погулять" по сайту, и ждать появления второго "кука". -
Нашёл решение сам. Может не совсем красивое, но рабочее )))
Использую функцию UrlDownloadToFile (uses SHDocVw) вместо Indy, которая в запросах вставляет необходимые мне Cookie. Т.е. по сути создаю в Run-time невидимый браузер (TWebBrowser) за пределами формы, который выполяет сценарий сайта... -
P.S. Спасибо за внимание к вопросу!! ))
-
Bolg (23.09.09 13:02) [7]idcookiemanager глючный!!! И это в 10-х инди((( Если не хочешь иметь проблем с куками, работай с ними сам:
1. Загрузи страницу гетом.
2. Загляни в idhttp.Response.RawHeaders.text, там будет к примеру это:HTTP/1.1 302 Moved Temporarily
Server: NoNaMe
Date: Wed, 23 Sep 2009 08:45:05 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Cache-Control: no-store, no-cache, must-revalidate
Expires: Wed, 23 Sep 2009 12:45:05 +0400
P3P: CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"
Set-Cookie: session=YTo0OntzOjEwOiJzZXNzaW9uX2lkIjtzOjMyOiI1MDIxZmEyMWNlNjg3ZDgyZGViMzNiOW U2YTM0NGYzYSI7czoxMDoiaXBfYWRkcmVzczoDkXZpdHkiO2k; expires=Wed, 07-Oct-2009 08:45:05 GMT; path=/; domain=
Set-Cookie: session=YTo2OntzOjEwOiJzZXNzaW9uX2lkIjtzOjMyOiI1MDIxZmEyMWNlNjg3ZDgyZGViMzNiOW U2YTM0NGYzYSI7czoxMDoiaXBfYWRkcMCI7cZkiO36wNTtzO; expires=Wed, 07-Oct-2009 08:45:05 GMT; path=/; domain=
Location: /
3. Вынимаеш все строки начинающиеся с "Set-Cookie:", а в них все что между "Set-Cookie:" и ; (session=YTo2OntzOjEw...;)
4. Кидаешь все это дело в Request:
idhtp.Request.CustomHeaders.Text:='Cookie: '+cookies;
И все! Вот это тру красивое рабочее решение, а idcookiemanager у меня из 3-х сайтов пахал токо с одним.