[delphi] Logowanie na grono.net

0

Próbuję się zalogować na grono.net przy pomocy komponentu TidHTTP, ale cuś mi nie wychodzi:

procedure TForm1.Button1Click(Sender: TObject);
var
Input: TStringStream;
begin
Input := TStringStream.Create('');
Input.Create('csrftoken=None&login=***&password=***&dest=%2Fusers%2F');
HTTP.Request.ContentType := 'application/x-www-form-urlencoded';
HTTP.Request.Host := 'grono.net';
HTTP.Request.Referer := 'http://grono.net/?autologin=0';
HTTP.Post('http://grono.net/index.php',Input); // prbowalem tez logform.php ale też dupa
Memo2.Lines.Text := HTTP.Get('http://grono.net/users/123/detail/'); // pobieram strone informacji o jakims uzytkowniku
WebBrowser1.OleObject.Document.body.innerHTML := Memo2.Lines.Text; // podpatruje w webbrowserze
end;

No i wychodzi na to że zalogownay nie jestem, a dostaje odpowiedz "HTTP/1.0 302 Found" (taka jak w Firefoxie).Sniffowałem firefoxa, i tam jest tak:

POST./.HTTP/1.1..Host:.grono.net..User-Agent:.Mozilla/5.0.(Windows;.U;.Windows.NT.5.1;.pl;.rv:1. 8.1.3).Gecko/200
itd (info o przeglądarce)

Content-Type:.application/x-www-form-urlencoded

Content-Length:.71 // tutaj mam -1 ale probowalem tez z 71

csrftoken=None&login=&password=&dest=%2Fusers%2F
Potrzebne mi to do wyszukiwania w opisach użytkowników jakiś ciągów znaków (ta wyszukiwarka na gronie badziewnie działa)

0
procedure TForm1.Button1Click(Sender: TObject);
var
Input: TStringStream;
begin
Input:=TStringStream.Create('csrftoken=None&login=***&password=***&dest=%2Fusers%2F');
HTTP.Request.ContentType := 'application/x-www-form-urlencoded';
HTTP.Request.Host := 'grono.net';
HTTP.Request.Referer := 'http://grono.net/?autologin=0';
HTTP.Post('http://grono.net/index.php',Input); // prbowalem tez logform.php ale też dupa
Memo2.Lines.Text := HTTP.Get('http://grono.net/users/123/detail/'); // pobieram strone informacji o jakims uzytkowniku
WebBrowser1.OleObject.Document.body.innerHTML := Memo2.Lines.Text; // podpatruje w webbrowserze
end;
0

Tak jak ja zrobiłem też może być. Problem leży chyba w tym że nie zapisują się żadne cookies (HTTP.CookieManager.CookieCollection.Count zwraca 0), AllowCookies mam na true...

0

A może taki adres: http://grono.net/

0

Nie, to nie to (bez różnicy). Adres jest poprawny, bo jak wpiszę złe hasło to mnie przekierowuje do strony "złe hasło lub login". Na pewno chodzi o cookies.

0

Nie rozumiem jeszcze jednej rzeczy, dlaczego mam w IdHTTP ustawioną wersję 1.1 protokołu, a w opdowiedzi dostaję HTTP/1.0? Przerobiłem wszystko na dokładnie takie samo jak w FF (z wyjątkiem cookies)

Input := TStringStream.Create('csrftoken=None&login=***&password=***&remember=on&dest=%2Fusers%2F');
HTTP.ProtocolVersion := pv1_1;
HTTP.Request.Host := 'grono.net';
HTTP.Request.UserAgent := 'Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3';
HTTP.Request.Accept := 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5';
HTTP.Request.AcceptLanguage := 'pl,en-us;q=0.7,en;q=0.3';
HTTP.Request.AcceptEncoding := 'gzip,deflate';
HTTP.Request.AcceptCharSet := 'ISO-8859-2,utf-8;q=0.7,*;q=0.7';
HTTP.Request.CustomHeaders.Add('Keep-Alive: 300');
HTTP.Request.Connection := 'keep-alive';
HTTP.Request.Referer := 'http://grono.net/?autologin=0';
HTTP.Request.ContentType := 'application/x-www-form-urlencoded';
Memo2.Lines.Text := HTTP.Post('http://grono.net',Input);
Memo1.Lines.Add(HTTP.Response.ResponseText);
Memo1.Lines.Add('cookies: ' + IntToStr(HTTP.CookieManager.CookieCollection.Count));
HTTP.Request.ContentEncoding := HTTP.Response.ContentEncoding;
HTTP.Request.ContentType := HTTP.Response.ContentType;
HTTP.Request.Expires := 0;
HTTP.Request.Pragma := HTTP.Response.Pragma;
HTTP.Request.CacheControl := HTTP.Response.CacheControl;
HTTP.Request.Date := HTTP.Response.Date;
Memo2.Lines.Text := HTTP.Get(HTTP.Response.Location);
Memo1.Lines.Add(HTTP.Response.ResponseText);
Memo1.Lines.Add('cookies: ' + IntToStr(HTTP.CookieManager.CookieCollection.Count));

I dostaję w memo:

HTTP/1.0 302 Found
cookies: 0
HTTP/1.1 200 OK
cookies: 0

0

Ewidentnie coś skopane z ciastkami. Utworzyłeś menadżera ciastek, skoro się do niego odwołujesz?

  IdCookieManager:= TIdCookieManager.Create(nil);
  IdHTTP.AllowCookies:= True;
  IdHTTP.CookieManager:= IdCookieManager; 
0

Oczywiście, mam go na formie.

0

Błąd może leżeć jeszcze gdzie indziej. Zrobiłem coś takiego:

Memo1.Lines.Text := IdHTTP1.Post('http://www.google.pl',input); // input = ''

I dostaję info:

HTTP/1.0 505 Not Implemented
Oczywiście mam ustawioną wersję protokołu na 1.1. Wygląda to tak jakby TIdHTTP nie spełniał standardów. Komuś się udało przy pomocy tego komponentu zalogować na cokolwiek z ciasteczkami?

0
pan m napisał(a)

HTTP/1.0 505 Not Implemented
Oczywiście mam ustawioną wersję protokołu na 1.1

no to ustaw na 1.0 :/

pan m napisał(a)

Wygląda to tak jakby TIdHTTP nie spełniał standardów

aha

pan m napisał(a)

Komuś się udało przy pomocy tego komponentu zalogować na cokolwiek z ciasteczkami?

nie :| pospiesz się to będziesz pierwszy

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0