用关键词“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. 在webpack中使用postcss-px2rem的

    经过一番折腾重要搞定了. 首先需要安装postcss-plugin-px2rem. npm install --save-dev postcss-plugin-px2rem 我的webpack工程中没 ...

  2. 【emWin】例程十六:窗口管理器

    介绍: 显示器上出现的任何内容都包含在窗口中,窗口可以为任何尺寸,并且可在屏幕上一次显示多个窗口, 甚至部分或整个窗口在其他窗口的前面也可.我们可以对窗口进行创建.移动.调整大小等操作,也 可以操控任 ...

  3. 【转帖】2015年2月份最佳的免费 UI 工具包

    2015年2月份最佳的免费 UI 工具包 设计师们最喜欢 UI 工具包,这是一种思路拓展的方法,同时可以利用它们来解决各种复杂的项目,同时可用来了解其他设计师的风格.这里我们收集了最近这一个月一些最棒 ...

  4. 将Java web应用部署到Tomcat 及部署到Tomcat根目录 的三种方式

    Tomcat作为Servlet/JSP容器(服务器)挺不错的,开源免费,需要知道的是Tomcat是一个Web服务器,其符合Servlet/JSP规范,但是却没有实现所有JavaEE规范,所以我们还是应 ...

  5. git解决 remote: Permission to wuheng1991/site-manager.git denied to XXX

    1.问题 2.解决 生成一个新的SSH KEY ssh-keygen  -t rsa –C “youremail@example.com” 命令: 3.修改 .git/config中的url 4.gi ...

  6. Angular4学习笔记(八)- ng-content

    内容投影 ng-content ng-content是一个占位符,有些类似于router-outlet. 以前举の例子,父组件包含子组件都是直接指明子组件的selector,比如子组件的selecto ...

  7. [Object Tracking] How to learn Active contour model - Snake Model

    常见四种跟踪的思路: 区域:人体肢体识别.跟踪 模型:人体面部识别.跟踪 特征:摄像头3D定位 主动轮廓:(蛇模型属于这er,数学基础<图像处理的偏微分方程方法>,也是最流行的一个目前) ...

  8. [Bayes] Point --> Line: Estimate "π" by R

    “半个数学系 + 一个计算机科学系 = Deep Learning初级班” simulation = function(sampleSize){ c = rep(0,sampleSize) // &l ...

  9. Linux设备驱动剖析之IIC(三)

    下面以eeprom用户程序调用ioctl函数的写操作为例追踪IIC子系统的调用过程.eeprom的用户测试是大部分开发板都自带的.看写一个字节数据的eeprom_write_byte函数的定义: in ...

  10. 三、K3 Cloud 开发插件《K3 Cloud插件开发新手指导 + K3 Cloud插件开发代码调试》

    案例需求:在销售订单上新增一个按钮,在订单明细中新增一个字段,命名[即时库存]. 点击按钮,弹出“Hello World!”,并获取订单明细物料的即时库存,填入字段[即时库存]. 开发工具:Visua ...