🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.pascal
10 messages
10 total messages Started by Sławek Tue, 05 Apr 2011 23:28
Logowanie na stronie http, błąd 301
#93169
Author: Sławek
Date: Tue, 05 Apr 2011 23:28
54 lines
2735 bytes
Witam,

Napisałem program, który loguje mi się na różne witryny,
po czym automatycznie pobiera mi z tych witryn pliki cennika.
Problem w tym, że na jedną z witryn nie mogę się zalogować.
Program jest trochę rozbudowany, więc napiszę skrótowo
czego użyłem:


IdHTTP.CookieManager := IdCookie;
// IdHTTP.IOHandler := IdSSL;
IdHTTP.HandleRedirects := True;
IdHTTP.AllowCookies := True;
IdHTTP.ReadTimeout := 5000;
IdHTTP.Request.UserAgent := 'Mozilla/5.0 (X11; U; Linux i686; pl-PL; 
rv:1.9.2.16) Gecko/20110322 Fedora/3.6.16-1.fc14 Firefox/3.6.16';

//pobranie strony logowania
adres := 'http://nowe.yamo.pl/'
IdHTTP.Request.Host := adres;
UstawCookies();
strona := IdHTTP.Get(adres);
OdbierzCookies();

   frData := TIdMultiPartFormDataStream.Create;
   try
     frData.AddFormField('l_login', moj_login);
     frData.AddFormField('l_pass', moje_haslo);
     frData.AddFormField('sf', 'l_login');
     UstawCookies();
     strona := IdHTTP.Post(adres, frData); //WYSYŁANIE FORMULARZA
     OdbierzCookies();
   finally
     FreeAndNil(frData);
   end;

Efekt jest taki, że Post zamiera na ok. półtorej minuty,
po czym zwraca pusty ciąg. Gdy zaś HandleRedirects
ustawię na false, to zwraca mi błąd 301. Tyle, że w
IdHTTP.Response.Location pojawia się wówczas ten sam adres,
który użyłem do wysłania formularza(!) - jakiś bezsens.

Przeglądarka (Firefox) po wyłączeniu javascript loguje się
bez problemów, a więc javascript nie ma tu nic do rzeczy.
Obsługa cookies raczej działa dobrze, bo na innych
witrynach nie mam takich problemów, ale jak trzeba to
podam co jest w UstawCookies i OdbierzCookies.

Może ktoś doradzi, co jest nie tak z tym kodem?
Gdzie szukać przyczyny problemu?
Jakaś wskazówka? Bo ja już nie mam pomysłu.

Pozdrawiam,
Sławek
Re: Logowanie na stronie http, błąd 301
#93170
Author: webmajsterek
Date: Wed, 06 Apr 2011 10:38
9 lines
1327 bytes
przecierz ta strona nie ma prawa działąc z wyłączonyą javascript ( logowanie 
oparte na javiescript ).   i pod firefoxem jak wyłącze jave to nie pokazuje się 
okienko logowania .




-- 
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Re: Logowanie na stronie http, błąd 301
#93171
Author: webmajsterek
Date: Wed, 06 Apr 2011 13:36
160 lines
5261 bytes
> Witam,

> 

> Napisałem program, który loguje mi się na różne witryny,

> po czym automatycznie pobiera mi z tych witryn pliki cennika.

> Problem w tym, że na jedną z witryn nie mogę się zalogować.

> Program jest trochę rozbudowany, więc napiszę skrótowo

> czego użyłem:

> 

> 

> IdHTTP.CookieManager := IdCookie;

> // IdHTTP.IOHandler := IdSSL;

> IdHTTP.HandleRedirects := True;

> IdHTTP.AllowCookies := True;

> IdHTTP.ReadTimeout := 5000;

> IdHTTP.Request.UserAgent := 'Mozilla/5.0 (X11; U; Linux i686; pl-PL; 

> rv:1.9.2.16) Gecko/20110322 Fedora/3.6.16-1.fc14 Firefox/3.6.16';

> 

> //pobranie strony logowania

> adres := 'http://nowe.yamo.pl/'

> IdHTTP.Request.Host := adres;

> UstawCookies();

> strona := IdHTTP.Get(adres);

> OdbierzCookies();

> 

>    frData := TIdMultiPartFormDataStream.Create;

>    try

>      frData.AddFormField('l_login', moj_login);

>      frData.AddFormField('l_pass', moje_haslo);

>      frData.AddFormField('sf', 'l_login');

>      UstawCookies();

>      strona := IdHTTP.Post(adres, frData); //WYSYŁANIE FORMULARZA

>      OdbierzCookies();

>    finally

>      FreeAndNil(frData);

>    end;

> 



> Przeglądarka (Firefox) po wyłączeniu javascript loguje się

> bez problemów, a więc javascript nie ma tu nic do rzeczy.

> Obsługa cookies raczej działa dobrze, bo na innych

> witrynach nie mam takich problemów, ale jak trzeba to

> podam co jest w UstawCookies i OdbierzCookies.

> 

> Może ktoś doradzi, co jest nie tak z tym kodem?

> Gdzie szukać przyczyny problemu?

> Jakaś wskazówka? Bo ja już nie mam pomysłu.

> 

> Pozdrawiam,

> Sławek


zbadałem strone  -- bez javyscript na 100 % nie ma szans zeby się zalogowac ( 
przynajmniej z poiomu przeglądarki ) bo  całość logowania jest w javiescript ( 
ajax ) .


logi 

OnBeforeNavigate2
Url=http://nowe.yamo.pl/
PostData=
onDowloadComplete
Cookies=__utma=82732809.531009810.1302092788.1302095687.1302096492.4; 
__utmb=82732809.1.10.1302096492; 
__utmz=82732809.1302092788.1.1.utmcsr=google|utmccn=(organic)
|utmcmd=organic|utmctr=http%3A%2F%2Fnowe.yamo.pl%2F; mgz=M1; yamo-
front=f6b296da4f3b9f18d70a38cae1a1b7d6
onDowloadComplete
Cookies=__utma=82732809.531009810.1302092788.1302096492.1302096774.5; 
__utmb=82732809.1.10.1302096774; 
__utmz=82732809.1302092788.1.1.utmcsr=google|utmccn=(organic)
|utmcmd=organic|utmctr=http%3A%2F%2Fnowe.yamo.pl%2F; mgz=M1; yamo-
front=f6b296da4f3b9f18d70a38cae1a1b7d6; __utmc=82732809

klik na zaoguj sie 

onDowloadComplete
Cookies=__utma=82732809.531009810.1302092788.1302096492.1302096774.5; 
__utmb=82732809.1.10.1302096774; 
__utmz=82732809.1302092788.1.1.utmcsr=google|utmccn=(organic)
|utmcmd=organic|utmctr=http%3A%2F%2Fnowe.yamo.pl%2F; mgz=M1; yamo-
front=f6b296da4f3b9f18d70a38cae1a1b7d6; __utmc=82732809
OnBeforeNavigate2
Url=http://nowe.yamo.pl/
PostData=l_login=kkkkkkkkkkkkkkkkkkkkkkkkkkkk&l_pass=kkkkkkkkkkkkkkkkkkkkkkkkkkk
k&sf=l_login&x=62&y=23
onDowloadComplete
Cookies=__utma=82732809.531009810.1302092788.1302096492.1302096774.5; 
__utmb=82732809.2.10.1302096774; 
__utmz=82732809.1302092788.1.1.utmcsr=google|utmccn=(organic)
|utmcmd=organic|utmctr=http%3A%2F%2Fnowe.yamo.pl%2F; mgz=M1; yamo-
front=f6b296da4f3b9f18d70a38cae1a1b7d6; __utmc=82732809
onDowloadComplete
Cookies=__utma=82732809.531009810.1302092788.1302096492.1302096774.5; 
__utmb=82732809.2.10.1302096774; 
__utmz=82732809.1302092788.1.1.utmcsr=google|utmccn=(organic)
|utmcmd=organic|utmctr=http%3A%2F%2Fnowe.yamo.pl%2F; mgz=M1; yamo-
front=f6b296da4f3b9f18d70a38cae1a1b7d6; __utmc=82732809
onDowloadComplete
Cookies=__utma=82732809.531009810.1302092788.1302096492.1302096774.5; 
__utmb=82732809.2.10.1302096774; 
__utmz=82732809.1302092788.1.1.utmcsr=google|utmccn=(organic)
|utmcmd=organic|utmctr=http%3A%2F%2Fnowe.yamo.pl%2F; mgz=M1; yamo-
front=f6b296da4f3b9f18d70a38cae1a1b7d6; __utmc=82732809

-----------
w logach   przy logowaniu  widać ze są jeszcze dwa parametry x i y ( wsólrzedne 
gdzie kliknąłeś na obrazku zaloguj się  ) spróbuj je dodać  przy próbie 
logowania . 

-- 
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Re: Logowanie na stronie http, błąd 301
#93173
Author: Łukasz 'Maly' Ostrowski
Date: Wed, 06 Apr 2011 15:02
53 lines
2596 bytes
On Wed, 06 Apr 2011 01:28:04 +0200, Sławek wrote:

> Witam,
> 
> Napisałem program, który loguje mi się na różne witryny,
> po czym automatycznie pobiera mi z tych witryn pliki cennika.
> Problem w tym, że na jedną z witryn nie mogę się zalogować.
> Program jest trochę rozbudowany, więc napiszę skrótowo
> czego użyłem:
> 
> 
> IdHTTP.CookieManager := IdCookie;
> // IdHTTP.IOHandler := IdSSL;
> IdHTTP.HandleRedirects := True;
> IdHTTP.AllowCookies := True;
> IdHTTP.ReadTimeout := 5000;
> IdHTTP.Request.UserAgent := 'Mozilla/5.0 (X11; U; Linux i686; pl-PL; 
> rv:1.9.2.16) Gecko/20110322 Fedora/3.6.16-1.fc14 Firefox/3.6.16';
> 
> //pobranie strony logowania
> adres := 'http://nowe.yamo.pl/'
> IdHTTP.Request.Host := adres;
> UstawCookies();
> strona := IdHTTP.Get(adres);
> OdbierzCookies();
> 
>    frData := TIdMultiPartFormDataStream.Create;
>    try
>      frData.AddFormField('l_login', moj_login);
>      frData.AddFormField('l_pass', moje_haslo);
>      frData.AddFormField('sf', 'l_login');
>      UstawCookies();
>      strona := IdHTTP.Post(adres, frData); //WYSYŁANIE FORMULARZA
>      OdbierzCookies();
>    finally
>      FreeAndNil(frData);
>    end;

Zakładająć że w ukrytych fragmentach nie ma żadnych robaczków,
to całość wygląda sprawnie.

1. Jaki jest Request.ContentType?
2. Debug log z Indy będzie wielce pomocny + porównanie z 
   outputem Fiddler'a, jeżeli Kolega nie zna narzędzia, 
   to radzę się zapoznać. Wklej Debug Log'a w miare
   możliwosći, zanonimizuj dane logowania.

P.S. Trudno sprawdzać takie coś bez danych logowania,
     a jestem leniwy na tyle, że się rejestrował nie będę ;-).

-- 
Pozdrawiam,
Łukasz 'Maly' Ostrowski.      http://l3v.eu/
Re: Logowanie na stronie http, błąd 301
#93172
Author: Sławek
Date: Wed, 06 Apr 2011 22:30
25 lines
2067 bytes
W dniu 06.04.2011 15:36, webmajsterek@poczta.onet.pl pisze:
> zbadałem strone  -- bez javyscript na 100 % nie ma szans zeby się zalogowac (
> przynajmniej z poiomu przeglądarki ) bo  całość logowania jest w javiescript (
> ajax ) .
>
Bez javascript na 100% można się zalogować.
Wystarczy doinstalować sobie wtyczkę Firebug do Firefoxa
i zmienić nią styl display: none na display: block dla
<div onclick="masker_close()" class="mask_diver" id="mask_window">
wówczas ten div się pojawi i można się zalogować.
Javascript zresztą dokładnie tylko to robi.

[ciach]
> -----------
> w logach   przy logowaniu  widać ze są jeszcze dwa parametry x i y ( wsólrzedne
> gdzie kliknąłeś na obrazku zaloguj się  ) spróbuj je dodać  przy próbie
> logowania .
>
Dodawałem x i y, ale nic to nie daje. Gdy się wyłączy obrazki
w przeglądarce, to można się zalogować, a wtedy x i y nie są
wysyłane - sprawdziłem.

Jutro do tego znów usiądę, dzisiaj miałem dość ciężki dzień.

Sławek
Re: Logowanie na stronie http, błąd 301
#93174
Author: Sławek
Date: Wed, 06 Apr 2011 22:38
25 lines
1956 bytes
W dniu 06.04.2011 17:02, Łukasz 'Maly' Ostrowski pisze:
>
> Zakładająć że w ukrytych fragmentach nie ma żadnych robaczków,
> to całość wygląda sprawnie.
Tak też mi się wydaje.

>
> 1. Jaki jest Request.ContentType?
> 2. Debug log z Indy będzie wielce pomocny + porównanie z
>     outputem Fiddler'a, jeżeli Kolega nie zna narzędzia,
>     to radzę się zapoznać. Wklej Debug Log'a w miare
>     możliwosći, zanonimizuj dane logowania.
Jutro postaram się dać na to odpowiedź, narzędzia faktycznie
nie znam, ale jak trzeba to się zapoznam.
Jak uzyskać debug loga z Indy też jeszcze nie wiem, dotąd
nie potrzebowałem.
Dzięki za wskazówki.
>
> P.S. Trudno sprawdzać takie coś bez danych logowania,
>       a jestem leniwy na tyle, że się rejestrował nie będę ;-).
>
Nie zarejestrują cię, chyba że masz firmę informatyczną
i podpiszesz z nimi umowę.

Sławek
Re: Logowanie na stronie http, błąd 301
#93175
Author: Sławek
Date: Fri, 08 Apr 2011 10:30
39 lines
2234 bytes
W dniu 06.04.2011 17:02, Łukasz 'Maly' Ostrowski pisze:

> 1. Jaki jest Request.ContentType?
Request.ContentType ustawiałem na:
'' (pusty)
'text/xml'
'text/html; charset=utf-8'
'application/x-www-form-urlencoded'
i za każdym razem efekt jest ten sam.

Jednak chyba nie w tym jest problem.
Użyłem Wiresharka i zauważyłem, że Indy przy

IdHTTP.HandleRedirects := true;

próbuje w kółko wysyłać na serwer dane logowania:
Robi POST, dostaje błąd 301, więc ponownie
robi POST na adres z Response.Location, znów
dostaje błąd 301 i tak w kółko.
Tymczasem przeglądarka gdy po POST dostanie
błąd 301, to po prostu pobiera potem stronę
z Response.Location za pomocą GET.
Z tego wniosek, że muszę użyć

IdHTTP.HandleRedirects := false;

i sam obsłużyć sytuację po błędzie 301.

Wstępne próby dają już obiecujące rezultaty,
ale jest tam jeszcze jakiś haczyk, bo dostaję
po GET zakodowane dane i kolejny błąd.

Content-encoded entity body (gzip): 9243 bytes [Error: Decompression failed]

Co ciekawe po zalogowaniu Firefoksem jest ten sam błąd,
a mimo to Firefox coś tam jeszcze robi i wyświetla potem
stronę poprawnie. Muszę to dokładniej przeanalizować.

Sławek
Re: Logowanie na stronie http, błąd 301
#93176
Author: Sławek
Date: Fri, 08 Apr 2011 11:16
17 lines
1456 bytes
W dniu 08.04.2011 12:30, Sławek pisze:
> Content-encoded entity body (gzip): 9243 bytes [Error: Decompression
> failed]
>
> Co ciekawe po zalogowaniu Firefoksem jest ten sam błąd,
> a mimo to Firefox coś tam jeszcze robi i wyświetla potem
> stronę poprawnie. Muszę to dokładniej przeanalizować.
>

Problem rozwiązany!

Wystarczyło podpiąć jeszcze TIdCompressorZLib
pod mój IdHTTP i ... śmiga!

Dzięki i pozdrawiam,

Sławek
Re: Logowanie na stronie http, błąd 301
#93177
Author: Łukasz 'Maly' Ostrowski
Date: Fri, 08 Apr 2011 11:18
29 lines
1795 bytes
On Fri, 08 Apr 2011 12:30:22 +0200, Sławek wrote:
> Jednak chyba nie w tym jest problem.
> Użyłem Wiresharka i zauważyłem, że Indy przy

Fiddler wygodniejszy do debugowania ruchu http.

> <snip>
> Z tego wniosek, że muszę użyć
> 
> IdHTTP.HandleRedirects := false;
> 
> i sam obsłużyć sytuację po błędzie 301.

Nie powinno być konieczne, cookiesy autoryzacyjne
dostaniesz w tym samym response w którym dostajesz
301, na 99.9%, a później możesz już sobie z nimi
przenawigować do sekcji "zabezpieczonej".

> Wstępne próby dają już obiecujące rezultaty,
> ale jest tam jeszcze jakiś haczyk, bo dostaję
> po GET zakodowane dane i kolejny błąd.
> 
> Content-encoded entity body (gzip): 9243 bytes [Error: Decompression failed]

Accept-Encoding plainowy może, jeżeli gzip jest problematyczny?

-- 
Pozdrawiam,
Łukasz 'Maly' Ostrowski.      http://l3v.eu/
Re: Logowanie na stronie http, błąd 301
#93178
Author: Sławek
Date: Fri, 08 Apr 2011 13:06
40 lines
2460 bytes
W dniu 08.04.2011 13:18, Łukasz 'Maly' Ostrowski pisze:
> On Fri, 08 Apr 2011 12:30:22 +0200, Sławek wrote:
>> Jednak chyba nie w tym jest problem.
>> Użyłem Wiresharka i zauważyłem, że Indy przy
>
> Fiddler wygodniejszy do debugowania ruchu http.

Może, ale jeszcze go nie używałem.
A w ogóle to Fiddler jest pod Linuxa?
Jakoś nie widzę go w repozytorium Fedory.

>
>> <snip>
>> Z tego wniosek, że muszę użyć
>>
>> IdHTTP.HandleRedirects := false;
>>
>> i sam obsłużyć sytuację po błędzie 301.
>
> Nie powinno być konieczne, cookiesy autoryzacyjne
> dostaniesz w tym samym response w którym dostajesz
> 301, na 99.9%, a później możesz już sobie z nimi
> przenawigować do sekcji "zabezpieczonej".

No tak tylko, że jak dam true, to błąd 301
dostaję dopiero po 1,5 minucie od wywołania Post,
a w tym czasie Indy wysyła chyba kilkadziesiąt razy
Posta w kółko. Więc nie bardzo widzę jak to ominąć.

Przy HandleRedirects := false Post się nie zapętla.
Jakoś to "dziwnie" jest tu zrobione, bo nie bardzo
rozumiem, po co przekierowywać na ten sam adres,
czy serwer nie mógłby po prostu odesłać to co ma do
odesłania? No ale tak tu jest i już.

Wydaje mi się, że to może być błąd w samym indy.
Widać nikt tu nie pomyślał, że przekierować można na
ten sam adres.

Sławek
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads