Jak jakiś mój kod sobie kopiujesz to korzystaj też z objaśnień. To nie Indyk ani święty Mikołaj, tutaj się nie zrobi "czary mary" i same przekierowanie się nie obsłuży. Kod:
uses
httpsend;
procedure TForm1.Button1Click(Sender : TObject);
const
Redir_C = 'Location: ';
var
SynHttp : THttpSend;
I, RedirPos : integer;
ACookie, RedirUrl : string;
begin
SynHttp := THttpSend.Create;
try
SynHttp.KeepAlive := True;
SynHttp.Protocol := '1.1';
SynHttp.UserAgent := 'Opera/9.80 (Windows NT 5.1; U; pl) Presto/2.6.30 Version/10.60';
SynHttp.HTTPMethod('GET', 'http://www.girlsofdesire.org/celeb');
ACookie := SynHttp.Cookies.text;
SynHttp.Clear;
SynHttp.Cookies.Text := ACookie;
SynHttp.KeepAlive := True;
SynHttp.Protocol := '1.1';
SynHttp.UserAgent := 'Opera/9.80 (Windows NT 5.1; U; pl) Presto/2.6.30 Version/10.60';
SynHttp.HTTPMethod('GET', 'http://www.girlsofdesire.org/media/pictures/2011-05-02-jennifer-lawrence/2_thumb.jpg');
ShowMessage(SynHttp.Headers.Text);
SynHttp.Document.SaveToFile('D:\miniatura.jpg');
with SynHttp do
begin
while (ResultCode = 301) or (ResultCode = 302) do
begin
for I := 0 to Headers.Count - 1 do
begin
RedirPos := Pos(Redir_C, Headers[I]);
if RedirPos > 0 then
begin
RedirUrl := Copy(Headers[I], RedirPos + Length(Redir_C), MaxInt);
Headers.Clear;
HTTPMethod('GET', RedirUrl);
Break;
end;
end;
end;
end;
finally
SynHttp.Free;
end;
end;
ShowMessage pokazuje:
---------------------------
Project1
---------------------------
HTTP/1.1 301 Moved Permanently
Location: /media/403.html
Content-Length: 0
Date: Mon, 02 May 2011 18:01:40 GMT
Server: lighttpd/1.4.22
---------------------------
OK
---------------------------
I wszystko jasne, po nazwie dokumentu 403 można wnioskowac, że nie masz uprawnien do przejrzenia strony. To samo zresztą masz odwiedzając: http://www.girlsofdesire.org/media/pictures/2011-05-02-jennifer-lawrence/2_thumb.jpg z pod prawdziwej przeglądarki http://heyaclub.planie ciasteczek pewnie nic nie da. Jeżeli do tej strony wymagane jest logowanie. To musisz to zrobić metodą POST. Nie raz na forum pokazywałem przykłady. Debuggerem http albo snifferem WireShark (jak go używać dowiesz się z tutoriali video na YouTube) ustal sobie co jest wysyłane do strony przy logowaniu i Synapse wyślij to samo. Ewentualnie musisz odwiedzać strony w taki sposób aby dotrzeć do tej. Ale podejrzewam, że logowanie jest wymagane. I myśl logicznie. Po co zapisywać plik na dysku, przecież Document to TMemoryStream, można to od razu wczytać do TImage, o ile grafika jest w obsługiwanym formacie. A jak już masz zapis do pliku to jeżeli plik jest pusty to na 99,999% oznacza to, że następuje przekierowanie i dlatego Stream Dokument nie zawiera żadnych danych. No chyba, że w tym wielokropku był jakiś kod do logowania metodą POST to widocznie źle się logujesz. I polecam sobie ten UserAgent, a w przypadku POSTowania własnośc MimeType ('application/x-www-form-urlencoded') zadeklarowac jako stałe żeby się nie powtarzać. Co do ostatniego pytania, to tak - przy użyciu Synapse można zrobić niemal wszystko to co potrafi internetowa przeglądarka pozbawiona pluginów oraz obsługi javascriptu. A na pewno pobieranie jpegów nawet po zalogowaniu jest możliwe. Sam sobie napisałem taki program do szybkiego pobierania wybranych galerii z http://heyaclub.pl i wszystko działa, tylko czasami jak na stronie coś zmienią to również trzeba do tego dostosować kod :)