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 ...
随机推荐
- 算法总结——主席树(poj2104)
题目: Description You are working for Macrohard company in data structures department. After failing y ...
- Wing IDE 6.0 算号器注册机代码
我开发Python时喜欢用Wing IDE, 然后最近发现Wing IDE升级到6.0版本了, 但是之前能在5.1上用的算号器代码不能用在6.0上了, 所以就上网搜搜是否有相关算号器, 果然, 找到了 ...
- C Looooops(poj 2115)
大致题意: 对于C的for(i=A ; i!=B ;i +=C)循环语句,问在k位存储系统中循环几次才会结束. 若在有限次内结束,则输出循环次数. 否则输出死循环. 解题思路: 题意不难理解,只是利用 ...
- python生成器及迭代器
一.迭代器 迭代器是访问集合元素的一种方式 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 迭代器有两个基本的方法: ...
- BZOJ——1571: [Usaco2009 Open]滑雪课Ski
http://www.lydsy.com/JudgeOnline/problem.php?id=1571 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: ...
- stm32f103定时器
1)TIM_TimeBaseInitTypeDef 时基初始化结构体,它包括了四个成员函数:TIM_ClockDivision.TIM_CounterMode.TIM_Period.TIM_Presc ...
- NOIPSB评测机+SB题DAY2
忍者钩爪 题目描述 小 Q 是一名酷爱钩爪的忍者, 最喜欢飞檐走壁的感觉, 有一天小 Q 发现一个练习使用钩 爪的好地方,决定在这里大显身手. 场景的天花板可以被描述为一个无穷长的数轴, 初始小 Q ...
- Maven配置将war包部署到Tomcat(tomcat7-maven-plugin)
Tomcat7/8: 提示:经过测试Tomcat7的配置和插件在Tomcat8中能正常运行 tomcat7-maven-plugin官方帮助文档:http://tomcat.apache.org/ma ...
- Fragment 生命周期怎么来的?
前言 Fragment对于 Android 开发人员来说一点都不陌生,由于差点儿不论什么一款 app 都大量使用 Fragment,所以 Fragment 的生命周期相信对于大家来说应该都非常清晰.但 ...
- BUPT复试专题—内存分配(2014-2)
题目描述 在操作系统中,内存分配是非常重要的工作.己知内存空间由N个内存块组成,这些内存块从1到N编号.进行内存分配时,操作系统将选择一块大小足够的内存全部分配给请求内存的进程.例如,当进程请求10M ...