我用IdHttp这个控件访问某些页面的时候,比如这个页面必须要登录之后才能看到的,我怎么通过idhttp和网站的cookies访问这个页面呢? 
我主要是想获取这个页面的html代码。 
通过CppWebBrowser,可以直接使用cookies,然后正常访问页面,获取html代码,但是感觉速度太慢了。 各位有没有好的方法呢? 
主要是使用idhttp的方法,谢谢。

解决方案 »

  1.   

    帮你顶一下吧,我也在搞这个,有兴趣的话,加我们的delphi交流群:4654765(delphi天堂)
      

  2.   

    TIdCookieManager应该可以解决这个问题,可惜我手头没有Indy的资料。我最近也在研究Indy,楼主QQ号是多少,我也想加。
      

  3.   

    TidHttp和Cookie 
    关键字: 
    分类: 个人专区 
    密级: 公开 
    (评分: , 回复: 1, 阅读: 59) ?? 
    我们知道,用IE注册网页(象论坛)时,它能够自动找出相应的Cookie并提交给服务器,从而使用户不用重新登录就能够看到与他自己帐号有关的内容.这是怎么实现的呢?如果我用用IE的ACTIVEX控件TWebBrowser,这个问题是不用考虑的,它自己处理了.但是有些场合TWebBrowser并不是上佳的选择,比如我们要从网页上取点内容下来,但是不用显示,这样也用WebBrowser的话程序就显得笨拙了.我今天用的是idHttp,据说拿它和IdCookieManager连起来用很好用,但是我没有弄懂.我用的是别的办法,整理如下:*取得与网址有关的Cookie
    用InternetGetCookie这个API,它在WinInet单元中
    有4个参数,第一个是URL,第二个设为nil,第二个指到一个变量BUFFER,存放Cookie的内容,第四个是Cookie的长度
    InternetGetCookie(PChar(Edit1.Text), nil, buf, Size)*给idHttp设置Cookie
    idHttp1.Request.CustomHeaders.Text := 'Cookie: ' + Memo1.Lines.Text;*取网页内容
    Memo1.Lines.Text := idHttp1.Get(Url);比较完整的代码如下:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      buf: array[0..1023] of char;
      Size: DWord;
    begin
      if InternetGetCookie(PChar(Edit1.Text), PChar(Edit2.Text), buf, Size) then
        begin
        Memo1.Lines.Text := Buf;
        idHttp1.Request.CustomHeaders.Text := 'Cookie: ' + Memo1.Lines.Text;
        end
      else
        Memo1.Lines.Text := 'error!';
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      Memo2.Lines.Text := IdHTTP1.Get(Edit1.Text);
    end;