Kod mi ciężko przytoczyć bo teraz ma w sumie ok. 2k linijek, a żebym wydobył tylko to co się odnosi do komunikacji http to bym musiał trochę czasu poświęcić. Zobaczę, czy uda mi się przez to zdarzenie, a jak nie to wezmę się do wydobycia kodu
EDIT. Mam ten kod:
Najpierw się loguję, jednak wysyłając kolejne zapytania z wiresharka wiem, że nie wysyłam otrzymanych cookie, przez co odpowiedzi nie są przyjmowane(Choc w wiresharku w odpowiedzi serwera nie ma o tym informacji, wiec sie tylko domyslam, ale nie bardzo widze, co jeszcze mogloby byc nie tak(Mam vip-a wiec recaptchy nie powinno byc))
Co ważniejsze fragmenty:
Kopiuj
procedure TMainForm.Button1Click(Sender: TObject);
const
UA = 'Mozilla/5.0 (Windows NT 5.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1';
var
Input, OutPut : TStringStream;
ErrCode : ShortString;
PliczekDrkwz : TextFile;
Cookies : String;
nCookies : Integer;
PliczekCookie : TextFile;
PliczekData : TextFile;
Liczba : Integer;
begin
Logowania.Lines.Clear;
Logowania.Lines.Add('Loguję do Darkwarez.pl...');
Input := TStringStream.Create('');
Output := TStringStream.Create('');
try
Button1.Enabled := False;
Forum.AllowCookies := TRUE;
Input.WriteString(Format('usrname=%s&passwrd=%s&autologin=on&redirect=&login=Zaloguj', [LoginDrkwz.Text, PassyDrkwz.Text]));
Forum.Request.UserAgent:= UA;
Forum.HandleRedirects:= True;
Forum.CookieManager:= IdCookieManager1;
Forum.Get('http://darkwarez.pl/forum/login.php');
Memo1.Lines.Add('METODA 1 - Cookie Collection:');
for i := 0 to Forum.CookieManager.CookieCollection.Count - 1 do
Memo1.Lines.Add(Forum.CookieManager.CookieCollection.Items[i].CookieText);
Memo1.Lines.Add('METODA 2 - Headers:');
Cookies := '';
Memo1.Clear;
for i:= 0 to Forum.Response.RawHeaders.Count - 1 do
begin
Memo1.Lines.Add(Forum.Response.RawHeaders.Strings[i]);
end;
Try
Forum.Request.Referer := 'http://darkwarez.pl/forum/login.php';
Forum.Post('http://darkwarez.pl/forum/login.php', Input, Output);
Forum.Request.Referer := 'http://darkwarez.pl/forum/';
except
Logowania.Lines.Add('Wystąpił błąd podczas logowania do Darkwarez');
ShowMessage('Błąd logowania!');
end;
Memo1.Clear;
Memo1.Lines.Add('Po logowaniu: METODA 1 - Cookie Collection:');
for i := 0 to Forum.CookieManager.CookieCollection.Count - 1 do
Memo1.Lines.Add(Forum.CookieManager.CookieCollection.Items[i].CookieText);
Memo1.Lines.Add('METODA 2 - Headers:');
Cookies := '';
for i:= 0 to Forum.Response.RawHeaders.Count - 1 do
begin
Memo1.Lines.Add(Forum.Response.RawHeaders.Strings[i]);
end;
Cookies := Memo1.Text;
If Pos('Set-Cookie:', Cookies) <> 0 then
begin
While Pos('Set-Cookie:', Cookies) <> 1 do
begin
Delete(Cookies, 1, 1);
end;
While Pos(':', Cookies) <> 1 do
begin
Delete(Cookies, 1, 1);
end;
Cookies := 'Cookies'+Cookies;
SetCookie1 := '';
While Pos('domain=.darkwarez.pl', Cookies)<> 1 do
begin
SetCookie1 := SetCookie1+Copy(Cookies, 1, 1);
Delete(Cookies, 1, 1);
end;
SetCookie1 := SetCookie1+'domain=.darkwarez.pl';
While Pos('Set-Cookie:', Cookies) <> 1 do
begin
Delete(Cookies, 1, 1);
end;
While Pos(':', Cookies) <> 1 do
begin
Delete(Cookies, 1, 1);
end;
Cookies := 'Cookies'+Cookies;
SetCookie2 := '';
While Pos('domain=.darkwarez.pl', Cookies)<> 1 do
begin
SetCookie2 := SetCookie2+Copy(Cookies, 1, 1);
Delete(Cookies, 1, 1);
end;
SetCookie2 := SetCookie2+'domain=.darkwarez.pl';
end;
Cookies := Memo1.Text;
AssignFile(PliczekCookie, 'SID.txt');
AssignFile(PliczekData, 'Data.txt');
nCookies := Pos('phpbb2dww_sid', Cookies);
If nCookies <> 0 then
begin
While Pos('phpbb2dww_data', Cookies) <> 1 do
begin
Delete(Cookies, 1, 1);
end;
While Pos('=', Cookies) <> 1 do
begin
Delete(Cookies, 1, 1);
end;
Delete(Cookies, 1, 1);
phpbb2dww_data := '';
While Pos(';', Cookies) <> 1 do
begin
phpbb2dww_data := phpbb2dww_data+Copy(Cookies, 1, 1);
Delete(Cookies, 1, 1);
end;
Forum.CookieManager.AddCookie('phpbb2dww_data='+phpbb2dww_data, '.darkwarez.pl');
Logowania.Lines.Add('Cookie phpbb2dww_data= '+phpbb2dww_data);
ReWrite(PliczekData);
Write(PliczekData, phpbb2dww_data);
CloseFile(PliczekData);
While Pos('phpbb2dww_sid', Cookies) <> 1 do
begin
Delete(Cookies, 1, 1);
end;
While Pos('=', Cookies) <> 1 do
begin
Delete(Cookies, 1, 1);
end;
Delete(Cookies, 1, 1);
SID := '';
While Pos(';', Cookies) <> 1 do
begin
SID := SID+Copy(Cookies, 1, 1);
Delete(Cookies, 1, 1);
end;
Forum.CookieManager.AddCookie('phpbb2dww_sid='+SID, '.darkwarez.pl');
ReWrite(PliczekCookie);
Write(PliczekCookie, SID);
CloseFile(PliczekCookie);
BrakSID := FALSE;
end
else
begin
If not FileExists('SID.txt') then
begin
BrakSid := TRUE
end
else
begin
Reset(PliczekCookie);
Readln(PliczekCookie, SID);
CloseFile(PliczekCookie);
BrakSid := FALSE;
Forum.CookieManager.AddCookie('phpbb2dww_sid='+SID, '.darkwarez.pl');
Reset(PliczekData);
Readln(PliczekData, phpbb2dww_data);
CloseFile(PliczekData);
Forum.CookieManager.AddCookie('phpbb2dww_data='+phpbb2dww_data, '.darkwarez.pl');
Memo1.Lines.Add('Wczytywanie z plikow tekstowych. METODA 1 - Cookie Collection:');
for Liczba := 0 to Forum.CookieManager.CookieCollection.Count - 1 do
Memo1.Lines.Add(Forum.CookieManager.CookieCollection.Items[i].CookieText);
end;
end;
If BrakSid then ShowMessage('Brak SID-a. Nie otrzymano Cookies');
Memo1.Lines.Add(Forum.Response.RawHeaders.CommaText);
Memo2.Lines.Add(Forum.Response.RawHeaders.Text);
if Pos('nieprawidłowe lub nieaktywne dane użytkownika', Output.DataString) <> 0 then
begin
bladlogowaniedrkwz := TRUE;
ErrCode := 'Podałeś nieprawidłowe lub nieaktywne dane użytkownika';
Logowania.Lines.Add('Wystąpił błąd podczas logowania do Darkwarez: '+ErrCode);
end;
If bladlogowaniedrkwz = FALSE then
begin
Logowania.Lines.Add('Pomyslnie zalogowano do darkwarez.pl!');
LoggedDrkwz := TRUE;
end
else
begin
LoggedDrkwz := FALSE;
end;
finally
Input.Free;
Output.Free;
Button1.Enabled := True;
end;
end;
Input3.WriteString(Format('subject=&helpbox=Tekst podkreślony: [u]tekst[/u] (alt+u)&message=%s&mode=reply&sid=%s&t=%s&post=Wyślij', [TrescOdpowiedzi2, SID, IdTematu]));
Forum.Request.Referer := 'http://darkwarez.pl/forum/posting.php?mode=reply&t='+IdTematu;
Forum.Post('http://darkwarez.pl/forum/posting.php', Input3, Output3);
StringOutput3 := Output3.DataString;
Forum.Request.Referer := 'http://darkwarez.pl/forum/';
If Pos('Set-Cookie: phpbb2dww_t', StringOutput3) <> 0 then
begin
While Pos('Set-Cookie: phpbb2dww_t', StringOutput3) <> 1 do
begin
Delete(StringOutput3, 1, 1);
end;
While Pos(':', StringOutput3) <> 1 do
begin
Delete(StringOutput3, 1, 1);
end;
Delete(StringOutput3, 1, 1);
phpbb2dww_t := '';
While pos(';', StringOutput3) <> 1 do
begin
phpbb2dww_t := phpbb2dww_t+Copy(StringOutput3, 1, 1);
Delete(StringOutput3, 1, 1);
end;
phpbb2dww_t := Trim(phpbb2dww_t);
Forum.CookieManager.AddCookie('phpbb2dww_t='+phpbb2dww_t, '.darkwarez.pl');
end;
Edit2.
Przeinstalowałem delphi, teraz cookie ze zbioru cookie collection są widoczne, jednak nie są wysyłane. Wyślę je manualnie. Możliwe, że w kodzie nie ma błędu, więc biorę się do pracy, ale jakbyście może coś znaleźli to dajcie znać;