gpt4 book ai didi

delphi - Indy - IdHttp 如何处理页面重定向?

转载 作者:行者123 更新时间:2023-12-03 14:47:55 25 4
gpt4 key购买 nike

使用:Delphi 2010,最新版本的 Indy

我正在尝试从 Google Adsense 网页上抓取数据,目的是获取报告。然而到目前为止我还没有成功。它在第一个请求后停止并且不再继续。

使用 Fiddler 调试 Google Adsense 网站的流量/请求,并使用网络浏览器加载 Adsense 页面,我可以看到请求(来自网络浏览器)生成了许多重定向,直到页面加载。

但是,我的 Delphi 应用程序在停止之前仅生成几个请求。

以下是我遵循的步骤:

  1. 将 IdHTTP 和 IdSSLIOHandlerSocketOpenSSL1 组件拖放到表单上。
  2. 将 IdHTTP 组件属性 AllowCookies 和 HandleRedirects 设置为 True,并将 IOHandler 属性设置为 IdSSLIOHandlerSocketOpenSSL1。
  3. 设置 IdSSLIOHandlerSocketOpenSSL1 组件属性 Method := '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;

但是,它没有按预期到达登录页面。我希望它的行为就像网络浏览器一样,并继续进行重定向,直到找到最终页面。

这是 Fiddler header 的输出:

HTTP/1.1 302 FoundLocation: https://encrypted.google.com/Cache-Control: privateContent-Type: text/html; charset=UTF-8Set-Cookie: PREF=ID=5166063f01b64b03:FF=0:TM=1293571783:LM=1293571783:S=a5OtsOqxu_GiV3d6; expires=Thu, 27-Dec-2012 21:29:43 GMT; path=/; domain=.google.comSet-Cookie: NID=42=XFUwZdkyF0TJKmoJjqoGgYNtGyOz-Irvz7ivao2z0--pCBKPpAvCGUeaa5GXLneP41wlpse-yU5UuC57pBfMkv434t7XB1H68ET0ZgVDNEPNmIVEQRVj7AA1Lnvv2Aez; expires=Wed, 29-Jun-2011 21:29:43 GMT; path=/; domain=.google.com; HttpOnlyDate: Tue, 28 Dec 2010 21:29:43 GMTServer: gwsContent-Length: 226X-XSS-Protection: 1; mode=block

首先,这个输出有什么问题吗?

我还应该做些什么来让 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 的(请求和响应 header )输出:

alt text

关于delphi - Indy - IdHttp 如何处理页面重定向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4549809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com