function GetRedirectUrl: string;
var i: integer;
Line: string;
begin
Result:='';
for i := 0 to HTTP.Headers.Count-1 do
begin
Line:=LowerCase(HTTP.Headers[i]);
if Pos('location:',Line)>0 then
begin
Result:=Trim(StringReplace(Line,'Location:','',[rfIgnoreCase]));
Exit;
end;
end;
end;
PostData := HTTP.HTTPMethod('POST','...',...);
HTTP.HTTPMethod('GET',GetRedirectUrl());
TDHttp = class
FCodePage: Cardinal;
FSend: THttpSend;
FReferer: string;
function GetError: string;
function GetRedirectUrl: string;
function GET(AUrl: string): string;
function POST(AUrl: string; AParams: TStringList): string;
Constructor Create; overload;
end;
//.........
constructor TDHttp.Create;
begin
FSend:=THttpSend.create;
FSend.Protocol:='1.1';
FSend.Timeout:=3000;
FCodePage:=CP_UTF8;
FSend.UserAgent:='Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0.1';
FSend.MimeType :='application/x-www-form-urlencoded';
end;
function TDHttp.GetError: string;
begin
Result:='';
if FSend.ResultCode>0 then
Result:=Result+IntToStr(FSend.ResultCode);
if FSend.ResultString<>'' then
Result:=Result+': '+FSend.ResultString;
end;
function TDHttp.GetRedirectUrl: string;
var i: integer;
Line: string;
begin
Result:='';
for i := 0 to FSend.Headers.Count-1 do
begin
Line:=LowerCase(FSend.Headers[i]);
if Pos('location:',Line)>0 then
begin
Result:=Trim(StringReplace(Line,'Location:','',[rfIgnoreCase]));
Exit;
end;
end;
end;
function TDHttp.GET(AUrl: string): string;
var Stream: TStringStream;
RedirectUrl: string;
begin
try
Stream:=TStringStream.Create('');
try
FSend.Headers.Clear;
FSend.Document.Clear;
if FReferer<>'' then FSend.Headers.Add('Referer: '+FReferer);
if FSend.HTTPMethod('GET', AUrl) then
begin
FSend.Document.SaveToStream(Stream);
Result:=Stream.DataString;
RedirectUrl:=GetRedirectUrl;
if RedirectUrl<>'' then
Result:=GET(RedirectUrl);
end else raise Exception.Create(GetError);
finally
Stream.Free;
end;
except
on E: Exception do
raise Exception.Create('TDHttp.GET('+AUrl+'): '+E.Message);
end;
end;
function TDHttp.POST(AUrl: string; AParams: TStringList): string;
var Stream: TStringStream;
RedirectUrl: string;
i: integer;
begin
try
Stream:=TStringStream.Create('');
try
FSend.Headers.Clear;
FSend.Document.Clear;
if FReferer<>'' then FSend.Headers.Add('Referer: '+FReferer);
for i := 0 to AParams.Count-1 do
if i=0 then
Stream.WriteString(AParams[i]) else
Stream.WriteString('&'+AParams[i]);
FSend.Document.LoadFromStream(Stream);
if FSend.HTTPMethod('POST',AUrl) then
begin
FSend.Document.SaveToStream(Stream);
Result:=Stream.DataString;
RedirectUrl:=GetRedirectUrl;
if RedirectUrl<>'' then
Result:=GET(RedirectUrl);
end else raise Exception.Create(GetError);
finally
Stream.Free;
end;
except
on E: Exception do
raise Exception.Create('TDHttp.POST('+AUrl+'): '+E.Message);
end;
end;
var
http: TDHTTP;
T: TStringList;
begin
http := TDHTTP.Create;
T := TStringList.Create;
// пример указания параметров
http.FSend.Headers.Add('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8');
http.FSend.Headers.Add('Host: mysite.com');
http.FSend.MimeType := 'application/x-www-form-urlencoded';
//если нужно использовать реферер то вот так:
http.FReferer := 'http://mysite.com/login';
// пример указания параметров
T.Add('username=11');
T.Add('password=22');
http.Post('http://mysite.com', T); // post запрос
http.Get('http://mysite.com'); // get запрос
end;
Не забываем отвечать на ответы в вашей теме,если от ТС не будет ответа,леса будет закрываться и чтобы её открыть заново ,нужно будет писать в лс,модератору или администрации который закрыл тему.как реализовать редирект в sunapse,если происходит перенаправление на другую страничку если есть пример кода и в двух словах как реализовать в своем софте
я что вам вундеркинд?дайте протестить по пробовать,будут вопросы или проблемы буду задавать,если не будет я сам скажу что все понятно всем спасибо тему можно закрывать,че мне спамить всякой ерундой,если еще ни чего не проверил,я лайк поставил,значит дал понять что спасибо пошел теститьНе забываем отвечать на ответы в вашей теме,если от ТС не будет ответа,леса будет закрываться и чтобы её открыть заново ,нужно будет писать в лс,модератору или администрации который закрыл тему.
Спасибо за понимание .
Мы делаем все,что бы нашим пользователям было удобно работать с форумом.
есть видео какое не то про эти Редиректы ?Код:function GetRedirectUrl: string; var i: integer; Line: string; begin Result:=''; for i := 0 to HTTP.Headers.Count-1 do begin Line:=LowerCase(HTTP.Headers[i]); if Pos('location:',Line)>0 then begin Result:=Trim(StringReplace(Line,'Location:','',[rfIgnoreCase])); Exit; end; end; end;
HTTP - твой THttpSend
Код:PostData := HTTP.HTTPMethod('POST','...',...); HTTP.HTTPMethod('GET',GetRedirectUrl());
А ещё лучше создать отдельный класс и не надо будет всегда создавать потоки. В работе проста, редирект и т.д.
Если интересно, вот:
Использование:Код:TDHttp = class FCodePage: Cardinal; FSend: THttpSend; FReferer: string; function GetError: string; function GetRedirectUrl: string; function GET(AUrl: string): string; function POST(AUrl: string; AParams: TStringList): string; Constructor Create; overload; end; //......... constructor TDHttp.Create; begin FSend:=THttpSend.create; FSend.Protocol:='1.1'; FSend.Timeout:=3000; FCodePage:=CP_UTF8; FSend.UserAgent:='Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0.1'; FSend.MimeType :='application/x-www-form-urlencoded'; end; function TDHttp.GetError: string; begin Result:=''; if FSend.ResultCode>0 then Result:=Result+IntToStr(FSend.ResultCode); if FSend.ResultString<>'' then Result:=Result+': '+FSend.ResultString; end; function TDHttp.GetRedirectUrl: string; var i: integer; Line: string; begin Result:=''; for i := 0 to FSend.Headers.Count-1 do begin Line:=LowerCase(FSend.Headers[i]); if Pos('location:',Line)>0 then begin Result:=Trim(StringReplace(Line,'Location:','',[rfIgnoreCase])); Exit; end; end; end; function TDHttp.GET(AUrl: string): string; var Stream: TStringStream; RedirectUrl: string; begin try Stream:=TStringStream.Create(''); try FSend.Headers.Clear; FSend.Document.Clear; if FReferer<>'' then FSend.Headers.Add('Referer: '+FReferer); if FSend.HTTPMethod('GET', AUrl) then begin FSend.Document.SaveToStream(Stream); Result:=Stream.DataString; RedirectUrl:=GetRedirectUrl; if RedirectUrl<>'' then Result:=GET(RedirectUrl); end else raise Exception.Create(GetError); finally Stream.Free; end; except on E: Exception do raise Exception.Create('TDHttp.GET('+AUrl+'): '+E.Message); end; end; function TDHttp.POST(AUrl: string; AParams: TStringList): string; var Stream: TStringStream; RedirectUrl: string; i: integer; begin try Stream:=TStringStream.Create(''); try FSend.Headers.Clear; FSend.Document.Clear; if FReferer<>'' then FSend.Headers.Add('Referer: '+FReferer); for i := 0 to AParams.Count-1 do if i=0 then Stream.WriteString(AParams[i]) else Stream.WriteString('&'+AParams[i]); FSend.Document.LoadFromStream(Stream); if FSend.HTTPMethod('POST',AUrl) then begin FSend.Document.SaveToStream(Stream); Result:=Stream.DataString; RedirectUrl:=GetRedirectUrl; if RedirectUrl<>'' then Result:=GET(RedirectUrl); end else raise Exception.Create(GetError); finally Stream.Free; end; except on E: Exception do raise Exception.Create('TDHttp.POST('+AUrl+'): '+E.Message); end; end;
Код:var http: TDHTTP; T: TStringList; begin http := TDHTTP.Create; T := TStringList.Create; // пример указания параметров http.FSend.Headers.Add('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'); http.FSend.Headers.Add('Host: mysite.com'); http.FSend.MimeType := 'application/x-www-form-urlencoded'; //если нужно использовать реферер то вот так: http.FReferer := 'http://mysite.com/login'; // пример указания параметров T.Add('username=11'); T.Add('password=22'); http.Post('http://mysite.com', T); // post запрос http.Get('http://mysite.com'); // get запрос end;
Что именно вас интересует?есть видео какое не то про эти Редиректы ?