IDHTTP用法详解 good
- 一、IDHTTP的基本用法
- IDHttp和WebBrowser一样,都可以实现抓取远端网页的功能,但是http方式更快、更节约资源,缺点是需要手动维护cook,连接等
- IDHttp的创建,需要引入IDHttp
- procedure InitHttp();
- begin
- http := TIdHTTP.Create(nil);
- http.ReadTimeout := 30000;
- http.OnRedirect := OnRedirect;
- http.Request.Accept := 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*';
- http.Request.AcceptLanguage := 'zh-cn';
- http.Request.ContentType := 'application/x-www-form-urlencoded';
- http.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322)';
- http.ProxyParams.ProxyServer := '代理服务器地址';
- http.ProxyParams.ProxyPort := '代理服务器端口';
- end;
- 二、如何取得服务端返回的cookie信息,并添加到http的request对象中
- procedure Setcookie;
- var
- i: Integer;
- tmp, cookie: String;
- 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
- for i := 0 to http.Request.RawHeaders.Count - 1 do
- begin
- tmp := http.Request.RawHeaders[i];
- if Pos('cookie', LowerCase(tmp)) = 0 then Continue;
- http.Request.RawHeaders.Delete(i);
- Break;
- end;
- http.Request.RawHeaders.Add('cookie: ' + cookie);
- end;
- end;
- 三、如何取得网页中的所有连接,对代码做修改你也可以实现查找所有图片等等
- function GetURLList(Data: String): TStringList;
- var
- i: Integer;
- List: TStringList;
- tmp: String;
- function Split(Data, Node: String): TStringList;
- var
- Count, i, j: Integer;
- function GetFieldCount(Data, Node: String): Integer;
- var
- i: Integer;
- begin
- Result := -1;
- i := Pos(Node, Data);
- if i = 0 then Exit;
- Result := 0;
- while i <> 0 do
- begin
- Inc(Result);
- Delete(Data, 1, i + Length(Node) - 1);
- i := Pos(Node, Data);
- end;
- end;
- begin
- Result := TStringList.Create;
- Count := GetFieldCount(Data, Node);
- for i := 0 to Count - 1 do
- begin
- j := Pos(Node, Data);
- Result.Add(Copy(Data, 1, j - 1));
- Delete(Data, 1, j + Length(Node) - 1);
- end;
- Result.Add(Data);
- end;
- begin
- Result := TStringList.Create;
- try
- List := split(Data, 'href=');
- for i := 1 to List.Count - 1 do
- begin
- tmp := List[i];
- tmp := Copy(tmp, 0, Pos('</a>', tmp) - 1);
- tmp := Copy(tmp, 0, Pos('>', tmp) - 1);
- if Pos(' ', tmp) <> 0 then
- tmp := Copy(tmp, 0, Pos(' ', tmp) - 1);
- tmp := Q_ReplaceStr(tmp, Char(34), '');
- tmp := Q_ReplaceStr(tmp, Char(39), '');
- if not Compare(CI.Key, tmp) then Continue;
- if Copy(tmp, 1, 7) <> 'http://' then
- begin
- if Copy(tmp, 1, 1) = '.' then tmp := StringReplace(tmp, '.', '', []);
- if Copy(tmp, 1, 1) = '.' then tmp := StringReplace(tmp, '.', '', []);
- try
- tmp := 'http://' + http.URL.Host + ':' + http.URL.Port + http.URL.Path + tmp;
- except
- end;
- end;
- if Result.IndexOf(tmp) <> -1 then Continue;
- Result.Add(tmp);
- end;
- FreeAndNil(List);
- except
- end;
- end;
- 四、如何模拟http的get方法打开一个网页
- function GetMethod(http: TIDhttp; URL: String; Max: Integer): String;
- var
- RespData: TStringStream;
- begin
- RespData := TStringStream.Create('');
- try
- try
- Http.Get(URL, RespData);
- Http.Request.Referer := URL;
- Result := RespData.DataString;
- except
- Dec(Max);
- if Max = 0 then
- begin
- Result := '';
- Exit;
- end;
- Result := GetMethod(http, URL, Max);
- end;
- finally
- FreeAndNil(RespData);
- end;
- end;
- 五、如何模拟http的post方法提交一个网页
- function PostMethod(URL, Data: String; max: Integer): String;
- var
- PostData, RespData: TStringStream;
- begin
- RespData := TStringStream.Create('');
- PostData := TStringStream.Create(Data);
- try
- try
- if http = nil then Exit;
- Http.Post(URL, PostData, RespData);
- Result := RespData.DataString;
- http.Request.Referer := URL;
- except
- Dec(Max);
- if Max = 0 then
- begin
- Result := '';
- Exit;
- end;
- Result := PostMethod(URL, Data, Max);
- end;
- finally
- http.Disconnect;
- FreeAndNil(RespData);
- FreeAndNil(PostData);
- end;
- end;
- 六、伪造session
- var
- My_Cookie,tmpcookie:string;
- begin
- aIdHttp.Get('http://www.huochepiao.net/');
- tmpcookie:=aIdHttp.Request.CustomHeaders.Values['Set-Cookie'];
- if Pos(';',tmpcookie)>0 then
- My_Cookie:=LeftBStr(tmpcookie,Pos(';',tmpcookie)-1)
- else
- My_Cookie:= tmpcookie;
- //
- aIdHTTP.Request.CustomHeaders.Clear;
- aIdHTTP.Request.CustomHeaders.Add('Cookie:'+My_COOKIE);
- end;
http://blog.csdn.net/s371795639/article/details/53634601
IDHTTP用法详解 good的更多相关文章
- Delphi IDHTTP用法详解(六种用法)
一.IDHTTP的基本用法 IDHttp和WebBrowser一样,都可以实现抓取远端网页的功能,但是http方式更快.更节约资源,缺点是需要手动维护cook,连接等 IDHttp的创建,需要引入ID ...
- Delphi IDHTTP用法详解
一.IDHTTP的基本用法 IDHttp和WebBrowser一样,都可以实现抓取远端网页的功能,但是http方式更快.更节约资源,缺点是需要手动维护cook,连接等 IDHttp的创建,需要引入 ...
- C#中string.format用法详解
C#中string.format用法详解 本文实例总结了C#中string.format用法.分享给大家供大家参考.具体分析如下: String.Format 方法的几种定义: String.Form ...
- @RequestMapping 用法详解之地址映射
@RequestMapping 用法详解之地址映射 引言: 前段时间项目中用到了RESTful模式来开发程序,但是当用POST.PUT模式提交数据时,发现服务器端接受不到提交的数据(服务器端参数绑定没 ...
- linux管道命令grep命令参数及用法详解---附使用案例|grep
功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...
- mysql中event的用法详解
一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存 ...
- CSS中伪类及伪元素用法详解
CSS中伪类及伪元素用法详解 伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的 ...
- c++中vector的用法详解
c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...
- AngularJS select中ngOptions用法详解
AngularJS select中ngOptions用法详解 一.用法 ngOption针对不同类型的数据源有不同的用法,主要体现在数组和对象上. 数组: label for value in a ...
随机推荐
- bzoj2120 数颜色 莫队 带修改
[bzoj2120]数颜色 Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔 ...
- Spoj-ANTP Mr. Ant & His Problem
Mr. Ant has 3 boxes and the infinite number of marbles. Now he wants to know the number of ways he c ...
- oracle 当中,(+)是什么意思
SELECT A.id, B.IDDFROM A, BWHERE A.id(+)=B.IDD等价于SELECT A.id, B.IDDFROM A RIGHT OUTER JOIN B ON ( A. ...
- 「CodePlus 2018 3 月赛」白金元首与莫斯科
$n \leq 17,m \leq 17$,$n*m$的01矩形,对每一个0问:当他单独变成1之后,在其他0处放多米诺牌(不一定放满,可以不放)的方案数.膜$1e9+7$. 直接$dp$是$n^42^ ...
- Codeforces Round #275 (Div. 2) B. Friends and Presents 二分+数学
8493833 2014-10-31 08:41:26 njczy2010 B - Friends and Presents G ...
- java使用jxl,自动导出数据excle,quartz自动发送邮件
=============JAVA后台代码===================== package com.qgc.service.autoSendMsg.AutoSendMsg import ja ...
- 测试开发系列之Python开发mock接口(二)
上一篇咱们已经把开发前的环境准备好了,还需要再做一点准备,你的账户信息是存在哪的呢,当然是存在数据库里的,咱们在去支付,扣钱的时候,肯定是从数据库里面操作的,去更新账户表里面的数据,所以咱们先要把数据 ...
- 关于几种UI框架简单总结
最近两年多的时间先后做过几款终端程序,UI框架从MFC转向过WxWidgets,之后再转向Qt.三种框架精通远谈不上,用起来还是没什么问题. 简单聊聊三种框架的优缺点. 1.MFC 似乎作为一种饱受批 ...
- js中的offsetParent,offsetLeft,offsetTop及jquery的offset(),position()比较
1.offsetParent 元素的offsetParent并不是元素的父元素,判断元素的offsetParent要根据以下情况: 1)当DOM结构层次中的元素均没有进行css定位(设置positio ...
- NIO与传统IO的区别(形象比喻)[转]
传统的socket IO中,需要为每个连接创建一个线程,当并发的连接数量非常巨大时,线程所占用的栈内存和CPU线程切换的开销将非常巨大.使用NIO,不再需要为每个线程创建单独的线程,可以用一个含有限数 ...