1. 一、IDHTTP的基本用法
  2. IDHttp和WebBrowser一样,都可以实现抓取远端网页的功能,但是http方式更快、更节约资源,缺点是需要手动维护cook,连接等
  3. IDHttp的创建,需要引入IDHttp
  4. procedure InitHttp();
  5. begin
  6. http := TIdHTTP.Create(nil);
  7. http.ReadTimeout := 30000;
  8. http.OnRedirect := OnRedirect;
  9. http.Request.Accept := 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*';
  10. http.Request.AcceptLanguage := 'zh-cn';
  11. http.Request.ContentType := 'application/x-www-form-urlencoded';
  12. http.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322)';
  13. http.ProxyParams.ProxyServer := '代理服务器地址';
  14. http.ProxyParams.ProxyPort := '代理服务器端口';
  15. end;
  16. 二、如何取得服务端返回的cookie信息,并添加到http的request对象中
  17. procedure Setcookie;
  18. var
  19. i: Integer;
  20. tmp, cookie: String;
  21. begin
  22. cookie := '';
  23. for i := 0 to http.Response.RawHeaders.Count - 1 do
  24. begin
  25. tmp := http.Response.RawHeaders[i];
  26. if pos('set-cookie: ', LowerCase(tmp)) = 0 then Continue;
  27. tmp := Trim(Copy(tmp, Pos('Set-cookie: ', tmp) + Length('Set-cookie: '), Length(tmp)));
  28. tmp := Trim(Copy(tmp, 0, Pos(';', tmp) - 1));
  29. if cookie = '' then cookie := tmp else cookie := cookie + '; ' + tmp;
  30. end;
  31. if cookie <> '' then
  32. begin
  33. for i := 0 to http.Request.RawHeaders.Count - 1 do
  34. begin
  35. tmp := http.Request.RawHeaders[i];
  36. if Pos('cookie', LowerCase(tmp)) = 0 then Continue;
  37. http.Request.RawHeaders.Delete(i);
  38. Break;
  39. end;
  40. http.Request.RawHeaders.Add('cookie: ' + cookie);
  41. end;
  42. end;
  43. 三、如何取得网页中的所有连接,对代码做修改你也可以实现查找所有图片等等
  44. function GetURLList(Data: String): TStringList;
  45. var
  46. i: Integer;
  47. List: TStringList;
  48. tmp: String;
  49. function Split(Data, Node: String): TStringList;
  50. var
  51. Count, i, j: Integer;
  52. function GetFieldCount(Data, Node: String): Integer;
  53. var
  54. i: Integer;
  55. begin
  56. Result := -1;
  57. i := Pos(Node, Data);
  58. if i = 0 then Exit;
  59. Result := 0;
  60. while i <> 0 do
  61. begin
  62. Inc(Result);
  63. Delete(Data, 1, i + Length(Node) - 1);
  64. i := Pos(Node, Data);
  65. end;
  66. end;
  67. begin
  68. Result := TStringList.Create;
  69.   Count := GetFieldCount(Data, Node);
  70.   for i := 0 to Count - 1 do
  71.   begin
  72.       j := Pos(Node, Data);
  73.       Result.Add(Copy(Data, 1, j - 1));
  74.       Delete(Data, 1, j + Length(Node) - 1);
  75.   end;
  76.   Result.Add(Data);
  77.  end;
  78. begin
  79.  Result := TStringList.Create;
  80.  try
  81. List := split(Data, 'href=');
  82. for i := 1 to List.Count - 1 do
  83. begin
  84. tmp := List[i];
  85. tmp := Copy(tmp, 0, Pos('</a>', tmp) - 1);
  86. tmp := Copy(tmp, 0, Pos('>', tmp) - 1);
  87. if Pos(' ', tmp) <> 0 then
  88. tmp := Copy(tmp, 0, Pos(' ', tmp) - 1);
  89. tmp := Q_ReplaceStr(tmp, Char(34), '');
  90. tmp := Q_ReplaceStr(tmp, Char(39), '');
  91. if not Compare(CI.Key, tmp) then Continue;
  92. if Copy(tmp, 1, 7) <> 'http://' then
  93. begin
  94. if Copy(tmp, 1, 1) = '.' then tmp := StringReplace(tmp, '.', '', []);
  95. if Copy(tmp, 1, 1) = '.' then tmp := StringReplace(tmp, '.', '', []);
  96. try
  97. tmp := 'http://' + http.URL.Host + ':' + http.URL.Port + http.URL.Path + tmp;
  98. except
  99. end;
  100. end;
  101. if Result.IndexOf(tmp) <> -1 then Continue;
  102. Result.Add(tmp);
  103. end;
  104. FreeAndNil(List);
  105. except
  106. end;
  107. end;
  108. 四、如何模拟http的get方法打开一个网页
  109. function GetMethod(http: TIDhttp; URL: String; Max: Integer): String;
  110. var
  111. RespData: TStringStream;
  112. begin
  113. RespData := TStringStream.Create('');
  114. try
  115. try
  116. Http.Get(URL, RespData);
  117. Http.Request.Referer := URL;
  118. Result := RespData.DataString;
  119. except
  120. Dec(Max);
  121. if Max = 0 then
  122. begin
  123. Result := '';
  124. Exit;
  125. end;
  126. Result := GetMethod(http, URL, Max);
  127. end;
  128. finally
  129. FreeAndNil(RespData);
  130. end;
  131. end;
  132. 五、如何模拟http的post方法提交一个网页
  133. function PostMethod(URL, Data: String; max: Integer): String;
  134. var
  135. PostData, RespData: TStringStream;
  136. begin
  137. RespData := TStringStream.Create('');
  138. PostData := TStringStream.Create(Data);
  139. try
  140. try
  141. if http = nil then Exit;
  142. Http.Post(URL, PostData, RespData);
  143. Result := RespData.DataString;
  144. http.Request.Referer := URL;
  145. except
  146. Dec(Max);
  147. if Max = 0 then
  148. begin
  149. Result := '';
  150. Exit;
  151. end;
  152. Result := PostMethod(URL, Data, Max);
  153. end;
  154. finally
  155. http.Disconnect;
  156. FreeAndNil(RespData);
  157. FreeAndNil(PostData);
  158. end;
  159. end;
  160. 六、伪造session
  161. var
  162. My_Cookie,tmpcookie:string;
  163. begin
  164. aIdHttp.Get('http://www.huochepiao.net/');
  165. tmpcookie:=aIdHttp.Request.CustomHeaders.Values['Set-Cookie'];
  166. if Pos(';',tmpcookie)>0 then
  167. My_Cookie:=LeftBStr(tmpcookie,Pos(';',tmpcookie)-1)
  168. else
  169. My_Cookie:= tmpcookie;
  170. //
  171. aIdHTTP.Request.CustomHeaders.Clear;
  172. aIdHTTP.Request.CustomHeaders.Add('Cookie:'+My_COOKIE);
  173. end;
 

http://blog.csdn.net/s371795639/article/details/53634601

IDHTTP用法详解 good的更多相关文章

  1. Delphi IDHTTP用法详解(六种用法)

    一.IDHTTP的基本用法 IDHttp和WebBrowser一样,都可以实现抓取远端网页的功能,但是http方式更快.更节约资源,缺点是需要手动维护cook,连接等 IDHttp的创建,需要引入ID ...

  2. Delphi IDHTTP用法详解

    一.IDHTTP的基本用法  IDHttp和WebBrowser一样,都可以实现抓取远端网页的功能,但是http方式更快.更节约资源,缺点是需要手动维护cook,连接等  IDHttp的创建,需要引入 ...

  3. C#中string.format用法详解

    C#中string.format用法详解 本文实例总结了C#中string.format用法.分享给大家供大家参考.具体分析如下: String.Format 方法的几种定义: String.Form ...

  4. @RequestMapping 用法详解之地址映射

    @RequestMapping 用法详解之地址映射 引言: 前段时间项目中用到了RESTful模式来开发程序,但是当用POST.PUT模式提交数据时,发现服务器端接受不到提交的数据(服务器端参数绑定没 ...

  5. linux管道命令grep命令参数及用法详解---附使用案例|grep

    功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...

  6. mysql中event的用法详解

    一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存 ...

  7. CSS中伪类及伪元素用法详解

    CSS中伪类及伪元素用法详解   伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的 ...

  8. c++中vector的用法详解

    c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...

  9. AngularJS select中ngOptions用法详解

    AngularJS select中ngOptions用法详解   一.用法 ngOption针对不同类型的数据源有不同的用法,主要体现在数组和对象上. 数组: label for value in a ...

随机推荐

  1. 【(最小权点基)tarjan强连通分量缩点+tarjan模板】HDU 5934 Bomb

    [AC] #include<bits/stdc++.h> using namespace std; typedef long long ll; int n; ; ; const int i ...

  2. mysql语句优化方案(网上流传)

    关于mysql处理百万级以上的数据时如何提高其查询速度的方法 最近一段时间由于工作需要,开始关注针对Mysql数据库的select查询语句的相关优化方法. 由于在参与的实际项目中发现当mysql表的数 ...

  3. JavaScript 的时间消耗--摘抄

    JavaScript 的时间消耗 2017-12-24 dwqs 前端那些事儿 随着我们的网站越来越依赖 JavaScript, 我们有时会(无意)用一些不易追踪的方式来传输一些(耗时的)东西. 在这 ...

  4. laravel 的模型

    建立model文件,再项目的app目录下建立Member.php namespace App; use Illuminate\Database\Eloquent\Model; class Member ...

  5. 简单div遮罩

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. git使用快速入门

    git简介 git是一种版本控制器,更直白的说,团队开发的时候,管理代码使用的软件 git安装 Windows安装 到 https://www.git-for-windows.github.io/ 下 ...

  7. T2832 6个朋友 codevs

    http://codevs.cn/problem/2832/  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 有这么一种说法: ...

  8. Vijos——1359 Superprime

    Superprime 描述 农民约翰的母牛总是生产出最好的肋骨.你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们. 农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还 ...

  9. Spark学习(四)Spark2.3 HA集群的分布式安装

    一.下载Spark安装包 1.从官网下载 http://spark.apache.org/downloads.html 2.从微软的镜像站下载 http://mirrors.hust.edu.cn/a ...

  10. Spring MVC使用Schedule实现定时任务

    Schedule存在spring-context.jar包中. 实现简单步骤: 1.配置bean.xml开启定时任务支持. <?xml version="1.0" encod ...