使用Twebbrowser访问并登录网站http://bbs.,用如下代码获取不了COOKIES,改成用InternetGetCookie,也不行,请各位朋友帮忙试一下,找出原因。 用抓包工具HTTPANALYZER查看,是有COOKIES的,问题是我无法获取到。 我的代码就如上所示,访问其他网站都可以获取到COOKIES,唯独这个网站不行,不知道原因
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了 首先声明一个全局变量 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; {释放} 发现问题所在了,应该是该网站对COOKIES设置了HttpOnly属性,导致COOKIES无法被客户端访问,请问如何访问具有HttpOnly属性的COOKIES 一个取得IE cookie的函数,不知道对你有没有用。不需要WEBBROWSER
调用
internetGetCookie 只读取 COOKIES目录下生成的COOKIE,HTTPONLY属性则不生成本地COOKIES中的文件,而是直接通过HTTP头来传输,所以要用其他的办法, VC中用 DO{ SUCCESS=CHTTPFILE::QueryInfo(HTTP_QUERY_SET_COOKIE,cookie.GetBuffer(),&dwbuflen,&dwval); }WHILE(SUCCESS) 完全可以读出!! 欢迎交流! |
|