idHTTP最简洁的修改和取得Cookie例子
- procedure TForm1.Button1Click(Sender: TObject);
- var
- HTTP: TidHTTP;
- html, s: string;
- i: integer;
- begin
- HTTP := TidHTTP.Create(nil);
- try
- HTTP.HandleRedirects := True;
- HTTP.AllowCookies := True;
- HTTP.Request.CustomHeaders.Values['Cookie'] := 'abcd';//修改Cookie 抓包可见
- html := HTTP.Get('http://www.baidu.com/');
- s := 'Cookies: ';
- if HTTP.CookieManager.CookieCollection.Count > 0 then
- for i := 0 to HTTP.CookieManager.CookieCollection.Count - 1 do
- s := s + HTTP.CookieManager.CookieCollection.Items[i].CookieText;
- Memo1.Lines.Add(s);//取得Cookie
- finally
- FreeAndNil(HTTP);
- end;
- end;
- //------------------------------------
- unit Unit1;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, IdCookieManager, IdBaseComponent, IdComponent, IdTCPConnection,
- IdTCPClient, IdHTTP;
- type
- TForm1 = class(TForm)
- IdHTTP1: TIdHTTP;
- IdCookieManager1: TIdCookieManager;
- procedure FormCreate(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- var
- Form1: TForm1;
- implementation
- {$R *.dfm}
- procedure TForm1.FormCreate(Sender: TObject);
- var
- Params: TStringList;
- HTML, loginurl, myuser: String;
- count,i:integer;
- _cookies, cookies:tstringlist;
- ll:boolean;
- name,value:String;
- procedure setcookies;
- var j:integer; s:string;
- begin
- count:=cookies.count;
- s:='';
- for j:=1 to count do
- begin
- IdCookieManager1.AddCookie(cookies[j-1],IdHTTP1.url.Host);
- s:=s+'; '+cookies[j-1];
- end;
- if s<>'' then
- begin
- delete(s,1,2);
- s:=s+';';
- IdHTTP1.Request.CustomHeaders.Values['Cookie']:=s;
- IdHTTP1.Request.RawHeaders.Values['Cookie']:=s;
- //('Cookie'+IdHTTP1.Request.RawHeaders.NameValueSeparator+s);
- end;{}
- end;
- procedure extractcookie(cookie:string; var name,value:string);
- var i,k:integer;
- begin
- i:=pos('=',cookie);
- k:=pos(';',cookie);
- if k=0 then k:=length(cookie);
- if i>0 then
- begin
- name:=copy(cookie,1,i-1);
- value:=copy(cookie,i+1,k-i-1);
- end else
- begin
- name:='';
- value:='';
- end;
- end;
- procedure savecookies;
- var j:integer;
- begin
- count:=IdCookieManager1.CookieCollection.count;
- for j:=1 to count do
- begin
- extractcookie(IdCookieManager1.CookieCollection.Items[j-1].CookieText,name,value);
- cookies.Values[name]:=value;
- end;
- // IdCookieManager1.CookieCollection.Clear;
- end;
- procedure saveit(name:string);
- begin
- with tfilestream.create(name,fmcreate) do
- try
- write(pansichar(html)^,length(html));
- finally
- free;
- end;
- end;
- begin
- ll:=false;
- loginurl:='http://feedmelinks.com/login';
- Params := TStringList.Create;
- try
- cookies:=tstringlist.Create;
- // cookies.Duplicates:=dupIgnore;
- // cookies.Sorted:=true;
- idhttp1.Host:='feedmelinks.com';
- html:=idhttp1.Get('http://feedmelinks.com/');// first get; get first cookie(s)
- savecookies;
- setcookies;
- html:=idhttp1.Get(loginUrl);// next get; this is clean: used for retrieving the viewstate
- savecookies;
- myuser:='crystyignat';
- Params.Values['userId'] := myuser;
- Params.Values['password'] := 'mypassword';
- Params.Values['op'] := 'login';
- IdHTTP1.HandleRedirects:=false;// now this made the buzz, because the cookies were not set when following the redirect
- try
- setcookies;
- HTML := IdHTTP1.Post(loginurl, Params);// now do the log in
- _Cookies := TStringList.Create;
- IdHTTP1.Response.RawHeaders.Extract('Set-cookie', _Cookies);
- for i := 0 to _Cookies.Count - 1 do
- begin
- // IdCookieManager1.AddCookie(_Cookies[i], IdHTTP1.URL.Host);
- extractcookie(_Cookies[i],name,value);
- cookies.Values[name]:=value;
- end;
- _cookies.free;
- // savecookies;
- if pos('<div class="welcome">Welcome, <b>'+myuser+'</b>',html)>0 then
- begin
- setCookies;
- html:=idhttp1.Get('http://feedmelinks.com/'); // software redirect
- savecookies;
- saveit('hhh.html');
- // setCookies;
- // html:=idhttp1.Get('http://feedmelinks.com/portal'); // another software redirect
- //savecookies;
- ll:=pos('<a class="tn" href="logout">log out',html)>0;
- end;
- except on e: EIdHTTPProtocolException do
- begin
- if e.ReplyErrorCode<>302 then
- raise e;
- // now this is the redirect
- count:=IdCookieManager1.CookieCollection.count;// get the next cookie (this will be the userid)
- for i:=1 to count do
- cookies.Add(IdCookieManager1.CookieCollection.Items[i-1].CookieText);
- setcookies;
- html:=idhttp1.Get(IdHTTP1.Response.Location);// follow redirect
- end;
- end;
- cookies.free;
- except on e: EIdHTTPProtocolException do
- begin
- showmessage(idHTTP1.response.ResponseText);
- end;
- end;
- Params.Free;
- showmessage('logged in? : '+booltostr(ll,true));
- end;
- end.
idHTTP最简洁的修改和取得Cookie例子的更多相关文章
- js/java 获取、添加、修改、删除cookie(最全)
一.cookie介绍 1.cookie的本来面目 HTTP协议本身是无状态的.什么是无状态呢,即服务器无法判断用户身份.Cookie实际上是一小段的文本信息(key-value格式).客户端向服务 ...
- chrome浏览器如何查看、修改、删除Cookie
1.chrome浏览器的cookie保存位置 C:\Users\你的用户名\AppData\Local\Google\Chrome\User Data\Default 快捷键win+r--> ...
- [PHP] - Laravel - 修改laravel_session的cookie名称
修改Cookie laravel_session的名称方法: 打开文件:config\session.php 找到值:laravel_session 修改为你所需要的cookie名称即可. 当然,还有 ...
- 【谷歌浏览器】修改和添加Cookie
一.使用谷歌浏览器 1.1.修改ookie 方法一:直接用开发者工具修改: 操作如图: 参考: 检查和删除 Cookie · Chrome 开发者工具中文文档 http://www.css88.c ...
- java内部发送http请求并取得返回结果,修改response的cookie
public Object userLogin(HttpServletRequest request, HttpServletResponse response, String email, Stri ...
- mongodb 修改数据结构的一个例子以及小梳理
mongodb的存储结构是灵活可变的,但是,并不意味着我们就肆意地使用不规则的文档结构.不规则的文档结构对于开发和后期的维护都是一个灾难.所以,还是要有一个约定的格式. 但是,由于前期设计的不周详和其 ...
- Cookie例子
马士兵老师的~~ cookie是服务器将信息保存在客户端的一个表示方式 名-值 服务器只能写入文档文件 每个浏览器都有唯一的标识号 且每个浏览器只允许访问与自身相关的cookie的内容 cookie分 ...
- CEF3 获取Cookie例子 CefCookieManager C++
首先从cef_cookie.h 源码种看到CefCookieManager 这个类: // Visit all cookies on the IO thread. The returned cooki ...
- 修改button样式小例子
.toolbar button{ background: none; border:none; padding:0 3px;} <div class="toolbar toolbar- ...
随机推荐
- POJ1573 Robot Motion(模拟)
题目链接. 分析: 很简单的一道题, #include <iostream> #include <cstring> #include <cstdio> #inclu ...
- MFC自定义消息
本文地址:http://blog.163.com/strive_only/blog/static/893801682010101911467765/ 消息机制是windows的典型运行机制,在MFC中 ...
- hdu5126stars
http://acm.hdu.edu.cn/showproblem.php?pid=5126 首先,对于一个询问,用容斥原理可以拆成8个询问,于是询问变成:给定一个四元组$(i,x_i,y_i,z_i ...
- 【动态规划】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 ...
- Nodejs in Visual Studio Code 05.Swig+Bootstrap
1. 开始 准备好Express+Swig的练习代码:https://github.com/Mengkzhaoyun/nodepractise 准备好AdminLTE后台管理模版:https://ww ...
- HDU 3853 LOOPS
题意:对于每一格,都可以往右走,原地不走,往下走,概率分别为a[i],b[i],c[i](每一个格子与其他格子的概率不一定相同).在R*C的棋盘上(输入数据保证不会走出棋盘),求从(0, 0)走到(R ...
- 《SDN核心技术剖析和实战指南》3.1控制器核心技术读书笔记
在SDN的架构中,控制器可以说是SDN的核心,它负责对底层转发设备的控制以及向上层应用提供可编程性的北向接口.从实现上看,主要分三个层面来考虑,南向接口技术,北向接口技术以及东西向的可扩展性能力.下面 ...
- 你不知道的关于计算机大师 Dijkstra 的事情
Dijkstra 的全名叫 Edsger Wybe Dijkstra(艾兹赫尔·韦伯·戴克斯特拉).大部分中国程序员如果能记住这个名字是因为学过计算最短路径的「Dijkstra 算法」,然而大部分人都 ...
- E - QS Network - zoj 1586(简单)
题意:在一个叫做QS的星系,他们使用一些特殊的通讯方式,两个人之间通讯需要使用一个网络适配器,但是一个网络适配器只能跟一个人联系,所有它连接几个人就需要及格适配器,而且每个人都有一些不同的偏好,喜欢的 ...
- Linux下Django的安装
1.下载Django.地址:https://www.djangoproject.com/download/ 2.解压3中得到的Django-1.6.2.tar.gz.使用下面的命令进行解压,解压后在当 ...