使用:Delphi 2010,Indy的最新版本
我试图从Google Adsense网页上抓取数据,以获取报告。但是到目前为止,我一直没有成功。它在第一个请求后停止,并且不会继续。
使用Fiddler调试对Google Adsense网站的访问量/请求,并使用网络浏览器加载Adsense页面,我可以看到(来自Web浏览器的)请求会生成许多重定向,直到页面加载完毕。
但是,我的Delphi应用程序在停止之前仅生成了几个请求。
这是我遵循的步骤:
终于我有了这段代码:
procedure TfmMain.GetUrlToFile(AURL, AFile : String);
var
Output : TMemoryStream;
begin
Output := TMemoryStream.Create;
try
IdHTTP1.Get(FURL, Output);
Output.SaveToFile(AFile);
finally
Output.Free;
end;
end;
但是,它没有按预期到达登录页面。我希望它的行为就像是一个Web浏览器,并继续进行重定向,直到找到最终页面为止。
这是Fiddler header 的输出:
首先,此输出有什么问题吗?
为了使IdHTTP组件继续进行重定向直到最后一页,我还应该做些其他事情吗?
最佳答案
进行调用之前,IdHTTP组件属性值:
Name := 'IdHTTP1';
IOHandler := IdSSLIOHandlerSocketOpenSSL1;
AllowCookies := True;
HandleRedirects := True;
RedirectMaximum := 35;
Request.UserAgent :=
'Mozilla/5.0 (Windows NT 5.1; rv:2.0b8) Gecko/20100101 Firefox/4.' +
'0b8';
HTTPOptions := [hoForceEncodeParams];
OnRedirect := IdHTTP1Redirect;
CookieManager := IdCookieManager1;
重定向事件处理程序:
procedure TfmMain.IdHTTP1Redirect(Sender: TObject; var dest: string; var
NumRedirect: Integer; var Handled: Boolean; var VMethod: string);
begin
Handled := True;
end;
拨打电话:
FURL := 'https://www.google.com';
GetUrlToFile( (FURL + '/adsense/'), 'a.html');
procedure TfmMain.GetUrlToFile(AURL, AFile : String);
var
Output : TMemoryStream;
begin
Output := TMemoryStream.Create;
try
try
IdHTTP1.Get(AURL, Output);
IdHTTP1.Disconnect;
except
end;
Output.SaveToFile(AFile);
finally
Output.Free;
end;
end;
这是Fiddler的(请求和响应头)输出: