Rozumiem że sam chcesz ustalić zawartość ciasteczek - i na przykład - zalogować się do strony poprzez POST?
Jeżeli tak to proponuje akorzystać z komponentów Synapse. Dodajesz httpsend do sekcji uses i robisz np. tak:
var
SynHttp : THttpSend;
begin
SynHttp := THttpSend.Create;
SynHttp.Cookies.Add('jakie ciastko chcesz tworzysz bo ta zmianna to StringList');
SynHttp.HTTPMethod('POST', 'http://adres-strony.net/costam', );
Memo1.Lines.LoadFromStream(SynHttp.Document);
SynHttp.Free;
end;
Poniżej inny przykłąd kodu. Po prostu programem - snifferem Wireshark ustaliłem logując się przeglądarką, a
konkretnie Operą, co jest przekazywane POST'em do strony i napisałem sobie procedurę, która loguje się na
stronie http://www.heyaclub.pl w celu pobierania stamtąd galerii zdjęć, bo łatwiej się przegląda mi je poprzez
AcdSee niż zmniejszone pod przeglądarką klikając na jakieś nawigacyjne przyciski. Wcześniej założyłęm tam do
przeglądania zdjęć wymagane konto. Procedurę wywołuje - jak poniiżej. Odpowiedź mam w MemoryStreamie.
HeyaPostToMemoryStream(Base_Url + Profile_Page, AUser, APass, MS);
Cały kod. Ta procedura akurat pobiera do MemoryStreama, ale jest też zapisywanie do plików tego Streama:
//...
const
Base_Url = 'http://www.heyaclub.pl/';
Profile_Page = 'index.php?go=profile';
Gallery_Page = 'index.php?go=galeria';
Gallery_SubPage = '&page=';
ToPost_MimeType = 'application/x-www-form-urlencoded';
Opera_UserAgent = 'Opera/9.80 (Windows NT 5.1; U; pl) Presto/2.2.15 Version/10.10';
//...
function HeyaPostToMemoryStream(const URL : string;
HeyaUserName, HeyaPassword : string; const MemoryStream : TMemoryStream) : boolean;
const
Location_Prefix = 'Location:' + #32;
var
SynHttp : THttpSend;
I, Position : integer;
UrlData, Str, DirectLink : string;
begin
UrlData := 'login=' + HeyaUserName + '&pass=' + HeyaPassword + '&action=zaloguj';
SynHttp := THttpSend.Create;
try
SynHttp.MimeType := ToPost_MimeType;
SynHttp.UserAgent := Opera_UserAgent;
SynHttp.Document.Write(Pointer(URLData)^, Length(URLData));
Result := SynHttp.HTTPMethod('POST', Url);
case SynHttp.ResultCode of
301, 302 :
begin
for I := 0 to SynHttp.Headers.Count - 1 do
begin
Str := SynHttp.Headers[I];
Position := Pos(Location_Prefix, Str);
if Position > 0 then
begin
DirectLink := Copy(Str, Position + Length(Location_Prefix), MaxInt);
Break;
end;
end;
HeyaPostToMemoryStream(DirectLink, HeyaUserName, HeyaPassword, MemoryStream);
end;
else
MemoryStream.Clear;
SynHttp.Document.SaveToStream(MemoryStream);
MemoryStream.Position := 0;
end;
finally
SynHttp.Free;
end;
end;
Ważny w tym przypadku jest MimeType, ale to co on zawiera możesz podejrzeć Wireshark'iem. Bo jak chcesz
jedynie mieć odpowiednie ciasteczka to spreparujesz je tak jak podałem na począrku. Poza metodą POST, ta
funkcja HttpMethod może jeszcze pobrać nagłowki poprzez parametr 'HEAD' lub pobierać za pomocą 'GET' :)