使用:Delphi 2010,Indy的最新版本
我试图从Googles Adsense网页上删除数据,目的是获取报告.但到目前为止我还没有成功.它在第一次请求后停止,但不继续.
使用Fiddler调试流向Google Adsense网站的流量/请求,以及用于加载Adsense页面的Web浏览器,我可以看到请求(来自webbrowser)会生成许多重定向,直到页面加载完毕.
但是,我的Delphi应用程序只在停止之前生成一些请求.
以下是我遵循的步骤:
>在表单上删除IdHTTP和IdSSLIOHandlerSocketOpenSSL1组件.
>将IdHTTP组件属性AllowCookies和HandleRedirects设置为True,将IOHandler属性设置为IdSSLIOHandlerSocketOpenSSL1.
>设置IdSSLIOHandlerSocketOpenSSL1组件属性方法:=’sslvSSLv23′
最后我有这个代码:
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;
但是,它没有按预期进入登录页面.我希望它表现得好像它是一个webbrowser并继续重定向,直到找到最后一页.
06001
首先,这个输出有什么问题吗?
还有什么我应该做的让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输出的(请求和响应头):