1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3. HTTP: TidHTTP;
  4. html, s: string;
  5. i: integer;
  6. begin
  7. HTTP := TidHTTP.Create(nil);
  8. try
  9. HTTP.HandleRedirects := True;
  10. HTTP.AllowCookies := True;
  11. HTTP.Request.CustomHeaders.Values['Cookie'] := 'abcd';//修改Cookie 抓包可见
  12. html := HTTP.Get('http://www.baidu.com/');
  13. s := 'Cookies: ';
  14. if HTTP.CookieManager.CookieCollection.Count > 0 then
  15. for i := 0 to HTTP.CookieManager.CookieCollection.Count - 1 do
  16. s := s + HTTP.CookieManager.CookieCollection.Items[i].CookieText;
  17. Memo1.Lines.Add(s);//取得Cookie
  18. finally
  19. FreeAndNil(HTTP);
  20. end;
  21. end;
  22. //------------------------------------
  23. unit Unit1;
  24. interface
  25. uses
  26. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  27. Dialogs, IdCookieManager, IdBaseComponent, IdComponent, IdTCPConnection,
  28. IdTCPClient, IdHTTP;
  29. type
  30. TForm1 = class(TForm)
  31. IdHTTP1: TIdHTTP;
  32. IdCookieManager1: TIdCookieManager;
  33. procedure FormCreate(Sender: TObject);
  34. private
  35. { Private declarations }
  36. public
  37. { Public declarations }
  38. end;
  39. var
  40. Form1: TForm1;
  41. implementation
  42. {$R *.dfm}
  43. procedure TForm1.FormCreate(Sender: TObject);
  44. var
  45. Params: TStringList;
  46. HTML, loginurl, myuser: String;
  47. count,i:integer;
  48. _cookies, cookies:tstringlist;
  49. ll:boolean;
  50. name,value:String;
  51. procedure setcookies;
  52. var j:integer; s:string;
  53. begin
  54. count:=cookies.count;
  55. s:='';
  56. for j:=1 to count do
  57. begin
  58. IdCookieManager1.AddCookie(cookies[j-1],IdHTTP1.url.Host);
  59. s:=s+'; '+cookies[j-1];
  60. end;
  61. if s<>'' then
  62. begin
  63. delete(s,1,2);
  64. s:=s+';';
  65. IdHTTP1.Request.CustomHeaders.Values['Cookie']:=s;
  66. IdHTTP1.Request.RawHeaders.Values['Cookie']:=s;
  67. //('Cookie'+IdHTTP1.Request.RawHeaders.NameValueSeparator+s);
  68. end;{}
  69. end;
  70. procedure extractcookie(cookie:string; var name,value:string);
  71. var i,k:integer;
  72. begin
  73. i:=pos('=',cookie);
  74. k:=pos(';',cookie);
  75. if k=0 then k:=length(cookie);
  76. if i>0 then
  77. begin
  78. name:=copy(cookie,1,i-1);
  79. value:=copy(cookie,i+1,k-i-1);
  80. end else
  81. begin
  82. name:='';
  83. value:='';
  84. end;
  85. end;
  86. procedure savecookies;
  87. var j:integer;
  88. begin
  89. count:=IdCookieManager1.CookieCollection.count;
  90. for j:=1 to count do
  91. begin
  92. extractcookie(IdCookieManager1.CookieCollection.Items[j-1].CookieText,name,value);
  93. cookies.Values[name]:=value;
  94. end;
  95. // IdCookieManager1.CookieCollection.Clear;
  96. end;
  97. procedure saveit(name:string);
  98. begin
  99. with tfilestream.create(name,fmcreate) do
  100. try
  101. write(pansichar(html)^,length(html));
  102. finally
  103. free;
  104. end;
  105. end;
  106. begin
  107. ll:=false;
  108. loginurl:='http://feedmelinks.com/login';
  109. Params := TStringList.Create;
  110. try
  111. cookies:=tstringlist.Create;
  112. // cookies.Duplicates:=dupIgnore;
  113. // cookies.Sorted:=true;
  114. idhttp1.Host:='feedmelinks.com';
  115. html:=idhttp1.Get('http://feedmelinks.com/');// first get; get first cookie(s)
  116. savecookies;
  117. setcookies;
  118. html:=idhttp1.Get(loginUrl);// next get; this is clean: used for retrieving the viewstate
  119. savecookies;
  120. myuser:='crystyignat';
  121. Params.Values['userId'] := myuser;
  122. Params.Values['password'] := 'mypassword';
  123. Params.Values['op'] := 'login';
  124. IdHTTP1.HandleRedirects:=false;// now this made the buzz, because the cookies were not set when following the redirect
  125. try
  126. setcookies;
  127. HTML := IdHTTP1.Post(loginurl, Params);// now do the log in
  128. _Cookies := TStringList.Create;
  129. IdHTTP1.Response.RawHeaders.Extract('Set-cookie', _Cookies);
  130. for i := 0 to _Cookies.Count - 1 do
  131. begin
  132. // IdCookieManager1.AddCookie(_Cookies[i], IdHTTP1.URL.Host);
  133. extractcookie(_Cookies[i],name,value);
  134. cookies.Values[name]:=value;
  135. end;
  136. _cookies.free;
  137. // savecookies;
  138. if pos('<div class="welcome">Welcome, <b>'+myuser+'</b>',html)>0 then
  139. begin
  140. setCookies;
  141. html:=idhttp1.Get('http://feedmelinks.com/'); // software redirect
  142. savecookies;
  143. saveit('hhh.html');
  144. // setCookies;
  145. // html:=idhttp1.Get('http://feedmelinks.com/portal'); // another software redirect
  146. //savecookies;
  147. ll:=pos('<a class="tn" href="logout">log out',html)>0;
  148. end;
  149. except on e: EIdHTTPProtocolException do
  150. begin
  151. if e.ReplyErrorCode<>302 then
  152. raise e;
  153. // now this is the redirect
  154. count:=IdCookieManager1.CookieCollection.count;// get the next cookie (this will be the userid)
  155. for i:=1 to count do
  156. cookies.Add(IdCookieManager1.CookieCollection.Items[i-1].CookieText);
  157. setcookies;
  158. html:=idhttp1.Get(IdHTTP1.Response.Location);// follow redirect
  159. end;
  160. end;
  161. cookies.free;
  162. except on e: EIdHTTPProtocolException do
  163. begin
  164. showmessage(idHTTP1.response.ResponseText);
  165. end;
  166. end;
  167. Params.Free;
  168. showmessage('logged in? : '+booltostr(ll,true));
  169. end;
  170. end.

  

idHTTP最简洁的修改和取得Cookie例子的更多相关文章

  1. js/java 获取、添加、修改、删除cookie(最全)

      一.cookie介绍 1.cookie的本来面目 HTTP协议本身是无状态的.什么是无状态呢,即服务器无法判断用户身份.Cookie实际上是一小段的文本信息(key-value格式).客户端向服务 ...

  2. chrome浏览器如何查看、修改、删除Cookie

      1.chrome浏览器的cookie保存位置 C:\Users\你的用户名\AppData\Local\Google\Chrome\User Data\Default 快捷键win+r--> ...

  3. [PHP] - Laravel - 修改laravel_session的cookie名称

    修改Cookie laravel_session的名称方法: 打开文件:config\session.php 找到值:laravel_session 修改为你所需要的cookie名称即可. 当然,还有 ...

  4. 【谷歌浏览器】修改和添加Cookie

    一.使用谷歌浏览器 1.1.修改ookie 方法一:直接用开发者工具修改: 操作如图:   参考: 检查和删除 Cookie · Chrome 开发者工具中文文档 http://www.css88.c ...

  5. java内部发送http请求并取得返回结果,修改response的cookie

    public Object userLogin(HttpServletRequest request, HttpServletResponse response, String email, Stri ...

  6. mongodb 修改数据结构的一个例子以及小梳理

    mongodb的存储结构是灵活可变的,但是,并不意味着我们就肆意地使用不规则的文档结构.不规则的文档结构对于开发和后期的维护都是一个灾难.所以,还是要有一个约定的格式. 但是,由于前期设计的不周详和其 ...

  7. Cookie例子

    马士兵老师的~~ cookie是服务器将信息保存在客户端的一个表示方式 名-值 服务器只能写入文档文件 每个浏览器都有唯一的标识号 且每个浏览器只允许访问与自身相关的cookie的内容 cookie分 ...

  8. CEF3 获取Cookie例子 CefCookieManager C++

    首先从cef_cookie.h 源码种看到CefCookieManager 这个类: // Visit all cookies on the IO thread. The returned cooki ...

  9. 修改button样式小例子

    .toolbar button{ background: none; border:none; padding:0 3px;} <div class="toolbar toolbar- ...

随机推荐

  1. POJ1573 Robot Motion(模拟)

    题目链接. 分析: 很简单的一道题, #include <iostream> #include <cstring> #include <cstdio> #inclu ...

  2. MFC自定义消息

    本文地址:http://blog.163.com/strive_only/blog/static/893801682010101911467765/ 消息机制是windows的典型运行机制,在MFC中 ...

  3. hdu5126stars

    http://acm.hdu.edu.cn/showproblem.php?pid=5126 首先,对于一个询问,用容斥原理可以拆成8个询问,于是询问变成:给定一个四元组$(i,x_i,y_i,z_i ...

  4. 【动态规划】HDU 1081 & XMU 1031 To the Max

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1081 http://acm.xmu.edu.cn/JudgeOnline/problem.php?i ...

  5. Nodejs in Visual Studio Code 05.Swig+Bootstrap

    1. 开始 准备好Express+Swig的练习代码:https://github.com/Mengkzhaoyun/nodepractise 准备好AdminLTE后台管理模版:https://ww ...

  6. HDU 3853 LOOPS

    题意:对于每一格,都可以往右走,原地不走,往下走,概率分别为a[i],b[i],c[i](每一个格子与其他格子的概率不一定相同).在R*C的棋盘上(输入数据保证不会走出棋盘),求从(0, 0)走到(R ...

  7. 《SDN核心技术剖析和实战指南》3.1控制器核心技术读书笔记

    在SDN的架构中,控制器可以说是SDN的核心,它负责对底层转发设备的控制以及向上层应用提供可编程性的北向接口.从实现上看,主要分三个层面来考虑,南向接口技术,北向接口技术以及东西向的可扩展性能力.下面 ...

  8. 你不知道的关于计算机大师 Dijkstra 的事情

    Dijkstra 的全名叫 Edsger Wybe Dijkstra(艾兹赫尔·韦伯·戴克斯特拉).大部分中国程序员如果能记住这个名字是因为学过计算最短路径的「Dijkstra 算法」,然而大部分人都 ...

  9. E - QS Network - zoj 1586(简单)

    题意:在一个叫做QS的星系,他们使用一些特殊的通讯方式,两个人之间通讯需要使用一个网络适配器,但是一个网络适配器只能跟一个人联系,所有它连接几个人就需要及格适配器,而且每个人都有一些不同的偏好,喜欢的 ...

  10. Linux下Django的安装

    1.下载Django.地址:https://www.djangoproject.com/download/ 2.解压3中得到的Django-1.6.2.tar.gz.使用下面的命令进行解压,解压后在当 ...