dhttp与IdCookieManager处理登陆过程

我们知道,用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;

//提次窗体
uses MSHTML;

procedure TForm1.Button1Click(Sender: TObject);
begin
(((WebBrowser1.Document as IHTMLDocument2).body.all as
IHTMLElementCollection).item('key', 0) as IHTMLInputElement
).value := 'zswang';

//提交
(((WebBrowser1.Document as IHTMLDocument2).body.all as
IHTMLElementCollection).item('hlf', 0) as IHTMLFormElement
).submit;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
WebBrowser1.Navigate('http://search.csdn.net/search.asp');
end;

idhttp1.Request.RawHeaders.Values['Cookie']   :=   '这里是cookie的值';   //

dhttp与IdCookieManager处理登陆过程的更多相关文章

  1. Sql server2012连接Sql server 2008时出现的问题:已成功与服务器建立连接,但在登陆过程中发生错误。(provider:SSL Provider,error:0-接收到的消息异常,或格式不正确。)

    以前连接是正常的,就这两天连不上了.(没有耐心的直接看末尾解决办法) 错误消息如下: 1.尝试读取或写入受保护的内存.这通常指示其他内存已损坏.(System.Data) 2.已成功与服务器建立连接, ...

  2. vs 或 Sql server2012连接Sql server时出现的问题:已成功与服务器建立连接,但在登陆过程中发生错误

    以前连接是正常的,就这两天连不上了.(没有耐心的直接看末尾解决办法) 错误消息如下: 1.尝试读取或写入受保护的内存.这通常指示其他内存已损坏.(System.Data) 2.已成功与服务器建立连接, ...

  3. linux系统登陆过程

    一.物理直连登陆过程 初始化进程init 会根据直接连接的字符终端设备,打开getty程序,并关联在字符终端设备上tty1/2/3/4/5/6/7....上,在不同的终端设备上提示用户输入信息,等待终 ...

  4. slave IO流程之一:mysql登陆过程(mysql_real_connect)

    最近看了slave IO的源码,发现slave IO的写relay log貌似是单线程单连接的,这让我有点小失望. slave IO的主函数是handle_slave_io,处理流程如下: 图1 ha ...

  5. scrapy爬取某网站,模拟登陆过程中遇到的那些坑

    本节内容 在访问网站的时候,我们经常遇到有些页面必须用户登录才能访问.这个时候我们之前写的傻傻的爬虫就被ban在门外了.所以本节,我们给爬虫配置cookie,使得爬虫能保持用户已登录的状态,达到获得那 ...

  6. 京东商城跨域设置Cookie实现SSO单点登陆过程

    可以先看下这边文章:http://blog.chinaunix.net/uid-25508399-id-3431705.html   1.点击首页的登陆按钮跳转到京东的登陆中心https://pass ...

  7. 五.数据库同步,创建django用户,用户登陆过程

    (1)配置数据库 项目目录/settings.py是一个普通的python模块,每项配置都是一key/value 数据库的配置是以dict的形式存放在这个模块中,key名为:DATABASES DAT ...

  8. SQL2012远程连接到SQL2008时的问题:已成功与服务器建立连接,但在登陆过程中发生错误。

    服务器装的是2008,我机上装的是2012,结果一远程连接马上报错而且2012直接crash了.后来找到这位兄弟的帖子,http://www.cnblogs.com/liuguozhu2015/p/3 ...

  9. CAS登陆过程UML中文版

    如果大家图片显示看不请,可以点击图片右键:在新窗口中打开图片,进行查看 名词解释 CASTGC:向cookie中添加该值的目的是当下次访问 认证中心 时,浏览器将Cookie中的TGC携带到服务器,服 ...

随机推荐

  1. linux每日命令(4):pwd命令

    Linux中用 pwd 命令来查看"当前工作目录"的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文 ...

  2. pycharm如何在debug的时候动态执行python语句

    在调试MATLAB的时候,这一点很容易实现,比如动态修改变量的值,在VS2017中调试python程序,这一点也很容易实现,但是我在pycharm里面找了半天,如下图:

  3. Apache Hadoop YARN: 背景及概述

    从2012年8月开始Apache Hadoop YARN(YARN = Yet Another Resource Negotiator)成了Apache Hadoop的一项子工程.自此Apache H ...

  4. C#获取文件版本信息

    使用FileVersionInfo获取版本信息 FileVersionInfo info = FileVersionInfo.GetVersionInfo(Application.Current.St ...

  5. easyui-combox(tagbox) 多选操作 显示为tagbox

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. Android studio 怎么使用单元测试(不需要device)

    关于单元测试的使用,写代码过程中有时候需要检测下代码逻辑的可行性与正确性,又不想通过设备运行,那么就可以通过单元测试跑下代码~ 1.首先建立一个Android studio的Android项目: 2. ...

  7. Java知多少(84)图形界面之布局设计

    在界面设计中,一个容器要放置许多组件,为了美观,为组件安排在容器中的位置,这就是布局设计.java.awt中定义了多种布局类,每种布局类对应一种布局的策略.常用的有以下布局类: FlowLayout, ...

  8. python安装模块

    pychram安装模块,非常简单!

  9. ubuntu14.04 中virtual box 加入 usb

    参考两篇文章: 1.http://www.cnblogs.com/ericsun/archive/2013/06/10/3130679.html 2.http://www.360doc.com/con ...

  10. php一句话木马

    一句话木马就是只需要一行代码的木马,短短一行代码,就能做到和大马相当的功能. 为了绕过waf的检测,一句话木马出现了无数中变形,但本质是不变的:木马的函数执行了发送的命令. 通过GET .POST . ...