加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 04:10:36 所属栏目:大数据 来源:网络整理
导读:使用:Delphi 2010,Indy的最新版本 我试图从Googles Adsense网页上删除数据,目的是获取报告.但到目前为止我还没有成功.它在第一次请求后停止,但不继续. 使用Fiddler调试流向Google Adsense网站的流量/请求,以及用于加载Adsense页面的Web浏览器,我可以看到请
使用: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并继续重定向,直到找到最后一页.

这是Fiddler标题的输出:

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输出的(请求和响应头):

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读