Witam!
Chcę napisać aplikację-bota do automatycznego przeglądania konkretnej strony www.
Niestety, strona ta wymaga obsługi cookies, tzn:
- ja wysyłam jej cos takiego: login.php?user=username&haslo=blabla
- ona ustawia mi ciastko z numerem sesji php
- wchodze na glowna.php
- stronka pobiera moj cookie i jesli jest ok to dziala, a jesli nie to wraca do index.php (HTTP 302).
No więc chcę zaemulować to w Dephi 7 z Indy.
Z pierwszym podpunktem nie ma problemu. Używam IdHTTP.Post z odpowiednimi parametrami, stronka się ładuje, a w IdCookieManager ląduje ciastko. Sprawdzam zawartość cookiemanagera - ciastko siedzi i wygląda prawidłowo.
No to teraz Robię IdHTTP.Get(glowna.php) i... 302, dostaję index.php.
Najlepsza rzecz, że włączam sniffer sieciowy i okazuje się, że Delphi NIE WYSŁAŁ w ogóle tego ciastka, chociaż powinien. Nagłówek z explorera (przy prawidłowym zalogowaniu) jest taki:
GET /current_sector.php HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, /
Referer: http://www.tdzk.net/login.php
Accept-Language: pl
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Crazy Browser 1.0.5)
Host: www.tdzk.net
Connection: Keep-Alive
Cookie: TDZK_IMAGE_PACK_PATH=file%3A%2F%2F%2Fc%3A%2Ftdzk%2Ftwilight%2F; TDZK_CSS_SKIN=1; trackingKey=105535652139393; TDZK_Main=acf514e2da0cbe728e78b079118d8f49
mniejsza o te wszystkie śmieci, najważniejsze że Delphi pomija linijkę Cookie: ...
Próbowałem dodać CustomHeaders w ten sposób:
IdHTTP1.Request.CustomHeaders.Add(CiasteczkowyString); gdzie CiasteczkowyString zawierał to co powinien, ale Delphi dalej tego nie wysyła. Gdzieś w helpie Indiego znalazłem że IdHTTP korzysta z tego tylko przy odbieraniu czy coś...
W każdym razie moje pytanie brzmi:
- czy da się to zrobić z IdHTTP i jeśli tak, to jak?
- jeśli nie, to jak "zaemulować" IdHTTP, czyli zrobić to ręcznie? (otworzyć połączenie z serwerem na porcie 80, coś wysłać, coś odebrać... wiadomo o co chodzi).
Będę wdzięczny za każdą pomoc!
Pozdrawiam,
DzinX
[email protected]