Ja w pewnym swoim programie napianym dla siebie, służącym do szybkiego pobierania obrazów
z galerri na stronie jednego z klubów w Szczecinie - zrobiłem tak, jak poniżej i strona zachowuje
się prawidłowo. To jaki pakiet wysylany jest POST'em, sprawdziłem pod WireSharkiem. No i jak
widzisz wysylane jest kilka zmiennych i docierają do serwera. Poniżej zapis do Streama i pliku, a
więc albo kod w pliku php po stronie serwera oczekuje jakiś innych danych albo pobierz sobie, na
przykład, WireSharka i zobacz co jest wysyłane dokładnie jak logujesz się przeglądarką www, bo
może jest to robione jakoś inaczej. Jak używać WireSharka, można dowiedzieć się z filmików na
youtube. Są też pewnie inne sniffery. A i dodam, że Synapse powinno wysłać prawidłowe dane,
wyjątkiem jest chyba tylko strona chomikuj.pl, próbowałem dodać funkcjonalność wrzucania tam
plików po http, no i się nie udało. Bo prawodpodobnie potrzebne jest coś, co obsłuży javascript.
Fakt, że Ty potrzebujesz logowania się z użyciem proxy, ale to nie powinno stanowić różnicy, no
chyba że się mylę. Nie znam się za bardzo na proxy. Ale możesz sobie w modułe httpsend czy w
jakim tam jest ta funkcja (pewnie w tym co piszę) ProxyHTTPpostURL i przeanalizowac jej kod.
// ...
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 HeyaPostToFile(const URL : string; HeyaUserName, HeyaPassword : string; const FileName : string) : 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;
HeyaPostToFile(DirectLink, HeyaUserName, HeyaPassword, FileName);
end;
else
SynHttp.Document.SaveToFile(FileName);
end;
finally
SynHttp.Free;
end;
end;
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;