用关键词“idhttp cookie”在各大搜索引擎得到的结果,大多千篇一律,如果你搜索到这一篇,恭喜你,你有福了。

  以下内容测试环境:delphi2007,  winxp sp3, indy10。

  一、idhttp的自动维护cookie功能。

  idhttp的AllowCookies属性默认是true,意思是自动维护cookie,所以,打算用idhttp登陆网站、发贴等操作,只需要设置此属性为true就行了。

  二、提交自定义cookie。

  如其它帖子所说,设置idhttp的cookie有多种说法,经我测试,以下两条有用:

  1:http1.Request.CustomHeaders.Values['Cookie']:='fdsa';

  2:http1.Request.CustomHeaders.text:='Cookie: fdsa';

  一般情况下,使用第一条最佳。

  需要注意的是:我们在提交一些表单之前,要先获取表单所在页面,取得一些表单数据,整理数据后,再post到服务器。若这两个步骤使用同一个idhttp,且AllowCookies为True,此时将不能修改cookie,

(不能删除和修改,可以增加一行cookie,如:

  已有cookie为“Cookie: user=aaa; pwd=bbb”,在程序中使用http1.Request.CustomHeaders.Values['Cookie']:='fdsa'或者http1.Request.CustomHeaders.text:='Cookie: fdsa';都不会生效,而:http1.Request.CustomHeaders.Add('Cookie: fdsa')会发生如下情况(抓包可知):

 Cookie: user=aaa; pwd=bbb

 Cookie: fdsa

 这样,实际是自定义的COOKIE是没有生效的。 

  若使用不同的idhttp,则需要手动维护cookie,最简单的维护方法如下:

procedure MyWorkEnd(Sender:TObject; AWorkMode:TWorkMode);

var

tmp,cookie:string;

i:integer;

begin

cookie := '';

for i := 0 to http.Response.RawHeaders.Count - 1 do

begin

tmp := http.Response.RawHeaders[i];

if pos('set-cookie: ', LowerCase(tmp)) = 0 then Continue;

tmp := Trim(Copy(tmp, Pos('Set-cookie: ', tmp) + Length('Set-cookie: '), Length(tmp)));

tmp := Trim(Copy(tmp, 0, Pos(';', tmp) - 1));

if cookie = '' then cookie := tmp else cookie := cookie + '; ' + tmp;

end;

if cookie <> '' then

begin

http.Request.CustomHeaders.Values['Cookie']:=cookie;

end;

end;

  请注意区分多个idhttp。

  若在同一idhttp,且AllowCookies为False,只需要用

  1:http1.Request.CustomHeaders.Values['Cookie']:='fdsa';

  2:http1.Request.CustomHeaders.text:='Cookie: fdsa';

总结,一般情况下是不用提交自定cookie的,需要的时候,把allowCookies设置为false(重点)。

idhttp与cookie的更多相关文章

  1. Delphi IdHTTP 设置cookie 和访问后读取Cookie 值

    procedure TForm1.btn1Click(Sender: TObject); var   IdHTTP: TIdHTTP;   mstrCookie: string;   Cookies ...

  2. IdHttp 资料

    http://blog.csdn.net/delphizhou/article/details/3085704 IdHttp 资料 网上找了些不过很不好找.今天找了些收藏在一起.以便他人查阅, idh ...

  3. dhttp与IdCookieManager处理登陆过程

    dhttp与IdCookieManager处理登陆过程 我们知道,用IE注册网页(象论坛)时,它能够自动找出相应的Cookie并提交给服务器,从而使用户不用重新登录就能够看到与他自己帐号有关的内容.这 ...

  4. idHTTP最简洁的修改和取得Cookie例子

    procedure TForm1.Button1Click(Sender: TObject); var HTTP: TidHTTP; html, s: string; i: integer; begi ...

  5. idhttp提交post带参数并带上cookie

    有这么一个提交连接 http://www.XXXXXX.com/test.php?p1=411328&p2=1&d1=HeroSkinList 一共有三个参数[p1]  [p2]  [ ...

  6. delphi请求idhttp数据

    idhttp ss : TStringStream; begin ss := TStringStream.)); { 指定gb2312的中文代码页,或者54936(gb18030)更好些 utf8 对 ...

  7. IDHttp的基本用法(转)

    一.IDHTTP的基本用法 IDHttp和WebBrowser一样,都可以实现抓取远端网页的功能,但是http方式更快.更节约资源,缺点是需要手动维护cook,连接等 IDHttp的创建,需要引入ID ...

  8. Delphi Idhttp Post提交 Aspx/Asp.net 时 500错误的解决办法。

    一直使用Delphi写程序,因为习惯了,用起来方便. 但是有一个问题困扰了我半年了.就是使用Idhttp Post提交时候总会有莫名其妙的错误,大部分网站没问题,但是一遇到Asp.net就报错500. ...

  9. Delphi的IDHTTP的基本用法

    一.IDHTTP的基本用法 IDHttp和WebBrowser一样,都可以实现抓取远端网页的功能,但是http方式更快.更节约资源,缺点是需要手动维护cook,连接等 IDHttp的创建,需要引入ID ...

随机推荐

  1. python实现合并两个文件并打印输出

    # python实现合并两个文件并打印输出 import fileinput file_Path1 = input("请输入第一个合并文件:") file_Path2 = inpu ...

  2. Json字符串转DataTable

    /// <summary> /// 将json转换为DataTable /// </summary> /// <param name="strJson" ...

  3. centos7安装elasticsearch-head

    elasticsearch-head安装前准备 1.操作系统64位CentOS Linux release 7.2.1511 (Core)2.git是必需的elasticsearch-head是一款开 ...

  4. WebMisSharp更新了,最新版本1.5.2,WebMisCentral-Client最新版

    WebMisSharp更新记录 Version 1.5.2 1.5.2下载地址:http://item.taobao.com/item.htm?spm=686.1000925.1000774.13.w ...

  5. Storm常见模式——流聚合

    转自:http://www.cnblogs.com/panfeng412/archive/2012/06/04/storm-common-patterns-of-stream-join.html 流聚 ...

  6. Pytest运行测试用例的多种方式和调试

    测试用例上方使用多个fixtures叠加时,是从下往上进行fixtures调用的.如果是 @pytest.mark.usefixtures('action','a','action2')这种形式,是从 ...

  7. Python中类的特殊变量

    特殊变量 类似__xx,以双下划线开头的实例变量名,就变成了一个私有变量(private),只有内部可以访问,外部不能访问: 类似__xx__,以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变 ...

  8. eclipse里将java工程改web工程

    转自:http://blog.csdn.net/heirenheiren/article/details/8488245 把一个普通的eclipse项目转成web项目 1.  编辑工程的.projec ...

  9. Flask框架(2)-JinJa2模板

    为了把业务逻辑和表现逻辑分开,Flask把表现逻辑移到JinJa2模板,模板是一个包含响应文本的文件.它用占位变量表示动态部分,其具体要从请求上下文才知道. 把真实值替换掉占位变量成为渲染,JinJa ...

  10. MySQL 之 库操作

    一.系统数据库 information_schema :虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信息等 mysql:核心数据库,里面包含用户.权限. ...