delphi idhttp与cookie


本文整理自网络,侵删。

 
用关键词“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(重点)。

相关阅读 >>

Delphi tms web core 嵌入js代码

Delphi中使用tpathanimation

Delphi取得当前目录的上一级目录

Delphi 调用百度地图api

Delphi获取系统进程和路径

Delphi使用project manager添加一个java库到你的应用程序

Delphi中formatdatetime函数的用法

Delphi sysutils.lastdelimiter - 判断一个字符串在另一个字符串中最后出现的位置

Delphi qr /条形码扫描仪应用示例代码(使用zxing,tframestand)

Delphi & c++ 安卓使用权限

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...