Delphi Indy TIdHTTP网站识别机器人
我正在尝试向网站发送一个Get请求。问题是,如果请求者是一个机器人,网站是无法识别的Delphi Indy TIdHTTP网站识别机器人,delphi,http-post,indy,idhttp,Delphi,Http Post,Indy,Idhttp,我正在尝试向网站发送一个Get请求。问题是,如果请求者是一个机器人,网站是无法识别的 const _URL = 'https://www.URL.com/'; var sSessionID:String; Params: TStringList; IdSSL: TIdSSLIOHandlerSocketOpenSSL; begin IdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP1); try IdHTTP1.IO
const _URL = 'https://www.URL.com/';
var
sSessionID:String;
Params: TStringList;
IdSSL: TIdSSLIOHandlerSocketOpenSSL;
begin
IdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP1);
try
IdHTTP1.IOHandler := IdSSL;
IdHTTP1.AllowCookies := True;
IdHTTP1.HandleRedirects := True;
IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0';
IdHTTP1.Request.Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
IdHTTP1.Request.AcceptLanguage := 'en-GB,en;q=0.5';
IdHTTP1.Request.Connection := 'keep-alive';
IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
sSessionID := IdHTTP1.Get(_URL);
{....
extracting SessionID
Params.Add('SessionID=' + 'sSessionID');
IdHTTP1.Post(_URL, Params);
.....}
finally
IdSSL.Free;
end;
IdHTTP.get的结果是
,因为我可以得到真实的URL这是我最好的猜测:
uses
Math;
...
const
_URL = 'https://www.url.com/';
var
sSessionID: string;
Params: TStringList;
IdSSL: TIdSSLIOHandlerSocketOpenSSL;
begin
IdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP1);
try
IdHTTP1.IOHandler := IdSSL;
IdHTTP1.AllowCookies := True;
IdHTTP1.HandleRedirects := True;
IdHTTP1.Request.CustomHeaders.AddValue('X-Forwarded-For', Format('%d.%d.%d.%d', [Random(255), Random(255), Random(255), Random(255)]));
IdHTTP1.Request.UserAgent := Format('Mozilla/%d.0 (Windows NT %d.%d; rv:2.0.1) Gecko/20100101 Firefox/%d.%d.%d', [RandomRange(3, 5), RandomRange(3, 5), Random(2), RandomRange(3, 5), Random(5), Random(5)]);
IdHTTP1.Request.Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
IdHTTP1.Request.AcceptLanguage := 'en-GB,en;q=0.5';
IdHTTP1.Request.Connection := 'keep-alive';
IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
sSessionID := IdHTTP1.Get(_URL);
...
finally
...
end;
有可能拥有你试图调用的真实URL吗?@JensBorrisholt不幸的是我不能这样做,那么很难帮助你,因为我无法测试我自己。但是你可以尝试在HTTP头文件中发送一个假的Ip地址。但是,我不能说它是否有效,因为我自己无法尝试。你能解释一下你做了什么改变,以及为什么你认为它会有效吗?@jens borrisholt,它只起了一两次作用,我不确定之后,结果显示为机器人。@RobKennedy,你可能会看到,我放了一个假ip地址(X-Forwarded-for)和UserAgent插入HTTP头中。这将愚弄一些网站。外汇。IMDB.com和Youtube.com。Bu正如我在回答中所写,这是一个猜测,因为我不能用它允许的不同IP再次测试真正的URL。。它在每个IP上都是相同的,你可以通过robot发送5个请求,然后该页面就会出现。当我测试你的答案时,我已经因为另一个原因更改了我的IP。@AbdulrahmanAljehani,正如我用真实URL所说的,我不能再做了。