使用Twebbrowser访问并登录网站http://bbs.dedecms.com,用如下代码获取不了COOKIES,改成用InternetGetCookie,也不行,请各位朋友帮忙试一下,找出原因。procedure TFrm_webview.webDocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  Cookieview.Text:=(web.document as ihtmldocument2).cookie;
end;

解决方案 »

  1.   

    用httpwatch监视一下,如果能监视到,肯定可以获取。
      

  2.   

    这个网站有cookie返回,你在检查一下你的程序
    Cookie 8017a_lastvisit=0%091228722707%09%2Fck.php%3F; 8017a_lastpos=other
      

  3.   

    用抓包工具HTTPANALYZER查看,是有COOKIES的,问题是我无法获取到。我的代码就如上所示,访问其他网站都可以获取到COOKIES,唯独这个网站不行,不知道原因
      

  4.   

    我用InternetGetCookie,他返回了2048个空格...
      

  5.   

    新建一工程,代码仅如下,还是无法获取
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, OleCtrls, SHDocVw, StdCtrls,ActiveX,mshtml;type
      TForm1 = class(TForm)
        WebBrowser1: TWebBrowser;
        Memo1: TMemo;
        Edit1: TEdit;
        Button3: TButton;
        procedure WebBrowser1DocumentComplete(Sender: TObject;
          const pDisp: IDispatch; var URL: OleVariant);
        procedure Button3Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    begin
      memo1.Lines.Text:=(WebBrowser1.document as ihtmldocument2).cookie;end;procedure TForm1.Button3Click(Sender: TObject);
    begin
      WebBrowser1.Navigate(EDIT1.Text);
    end;end.
      

  6.   

    jinjazz 你用InternetGetCookie没失败么,我使用的InternetGetCookie函数返回FALSE。
      

  7.   

    ondocumentcomplete事件会触发多次,基本上第一次不是我们想要的所以你会出错。你可以改成这样procedure TFrm_webview.webDocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    begin
    if web.LocationURL=URL then
      Cookieview.Text:=(web.document as ihtmldocument2).cookie;
    end;这样就能保证是在页面完全打开后才取cookie了
      

  8.   

    也碰到过相同的问题。弹出新的窗口后,cookie就丢失了。
    不知是什么原因。
      

  9.   

    可以取到COOKIE,但改不了,原因是微软为了安全的原因,不让改在线的CCOKIE;
      

  10.   

    按lcgboy的说法做了测试,该事件只触发了一次,仍无法取到COOKIES,行不同。yhec 是如何取的?我这里没有管修改,只询问如何取到这个网址的COOKIES,你能按你的方法试一下,然后告诉我吗
      

  11.   

    用抓包软件是能取到COOKIES的
    但是,现在问题是用InternetGetCookie和TWEBBROWSER没有取到,寻找解决方法
      

  12.   

    我问了好多问题,虽然回答的答案并不一定能解决问题但也谢谢各位论坛上的朋友热心回答。。现在我也回报一下我的学习知识。希望能帮助楼主 ,请看我的备注首先声明一个全局变量 Doc : IHTMLDocument2; 
          注意头部要加上mshtml 连接我就简单说一下吧
      按钮
       WebBrowser1.Navigate(Edit1.Text); 在webbrowser1的DocumentComplete事件中加入以下代码  ---取cookie值 
      Doc:=WebBrowser1.Document as IHTMLDocument2;  //获得 一个IHTMLDocument2对象
      edit2.Text:=Doc.cookie;    //Doc.cookie就是页面COOKIE信息了  在webbrowser1的ProgressChange事件中加入以下代码 
     if WebBrowser1.LocationURL <> 'about:blank' then
        edit1.Text := WebBrowser1.LocationURL //请注意此处为地址栏,当你点击其他页面的时候也要让他跟着变
      else                                      //要不然当你想修改COOKIE的时候会发现无法修改  
        Edit1.Text := ''; 
     修改COOKIE按钮一个
     在按钮中声明一个SList: TStrings;
     然后在begin和end插入
     if Edit2.Text = '' then Exit;
     SList := TStringList.Create; {修改浏览器的Cookies}
     Slist.CommaText := Edit2.Text;
     for i := 0 to SList.Count - 1 do {将Cookies分段提交给浏览器}
      Doc.cookie := SList.Strings[i];
     Webbrowser1.Refresh; {修改后Cookies后刷新浏览器}
     SList.Free; {释放}   
      

  13.   

    楼上的给出了如果用TWebbrowser取COOKIES的代码,谢谢。不过,不能解决我提出的问题,继续求解!
      

  14.   

    这位朋友大概没看清我的问题,我在实际操作中发现用InternetGetCookie和TWEBBROWSER两种方法都没取到这个网站(http://bbs.dedecms.com)的COOKIES,所以求助方法。
      

  15.   

    我和你遇到同样的问题,我是用C#    private static string GetCookie(string url)
        {
            string cookieName = null;
            int size = 5000;
            StringBuilder sb = new StringBuilder(size);  // 要指定容量,大于Cookie就可以,否则读取不全
             InternetGetCookie(url, cookieName, sb, ref size);
            string cookie = sb.ToString();
            return cookie;
        }我也试了你那个网站,也提不到cookies,但其它网站都是可以的
      

  16.   

    发现问题所在了,应该是该网站对COOKIES设置了HttpOnly属性,导致COOKIES无法被客户端访问,请问如何访问具有HttpOnly属性的COOKIES
      

  17.   

    我也遇到过这个问题,我那时侯获得cookie不稳定,有时候有,有时候没有
      

  18.   

    一个取得IE cookie的函数,不知道对你有没有用。不需要WEBBROWSERfunction GetCookie():string;
    var
      cookbuffer:array[0..1023] of char;
      Size : Dword;
    begin
      InternetGetCookie(pchar('http://tieba.baidu.com/'),pchar('BAIDUID'),cookbuffer,size);
      result := cookbuffer;
    end;调用var
      str : string;
    begin
      str := GetCookie(); //必要的
      idhttp1.Request.CustomHeaders.Text := 'Cookie: '+str; 
      Memo1.Text := idhttp1.Get('http://bbs.dedecms.com');
    end;
      

  19.   

    直接用InternetGetCookie是解决不了这个问题的,前面已经说明了。
      

  20.   

    InternetGetCookie 只读取 COOKIES目录下生成的COOKIE,HTTPONLY属性则不生成本地COOKIES中的文件,而是直接通过HTTP头来传输,所以要用其他的办法,VC中用 
    DO{
    SUCCESS=CHTTPFILE::QueryInfo(HTTP_QUERY_SET_COOKIE,cookie.GetBuffer(),&dwbuflen,&dwval);
    }WHILE(SUCCESS)
    完全可以读出!!欢迎交流!
      

  21.   

    请教DELPHI中该怎么实现37楼的办法呢?