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. 【2018.10.2】Note of CXM

    1.有一张无向图,现在要给每个点染上黑色或白色,最后每个点的染色代价是它与离这个点最近的不同色节点的距离.求最小代价.所有边权$\geq 0$且互不相同. 分三种情况: 两点都染了色:两点都跟其它点算 ...

  2. cf575A Fibonotci

    Fibonotci sequence is an integer recursive sequence defined by the recurrence relation Fn = sn - 1·F ...

  3. Spring JdbcTemplate 与 事务管理 学习

    Spring的JDBC框架能够承担资源管理和异常处理的工作,从而简化我们的JDBC代码, 让我们只需编写从数据库读写数据所必需的代码.Spring把数据访问的样板代码隐藏到模板类之下, 结合Sprin ...

  4. vue项目实战, webpack 配置流程记录

    vue项目实战记录,地址在这 购物车单界面 npm install npm run dev 跑起来可以看到界面效果 这里简单记录一下webpack的编译流程 入口 package.json " ...

  5. 【HDOJ5948】Thickest Burger(签到)

    题意:不知道 思路:队友写的 #include <stdio.h> #include <vector> #include <algorithm> #include ...

  6. 转载 gdb调试程序

    转载自csdn,作者haoel,链接http://blog.csdn.net/haoel/article/details/2879 用GDB调试程序 GDB概述———— GDB是GNU开源组织发布的一 ...

  7. [BOI2007] Mokia

    题目描述 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如“用户C的位置在哪?”的问题,精确到毫米.但其真正高科技之处在于,它能够回 ...

  8. [JSOI2016]反质数序列

    我竟然半个小时切了一道JSOI2016,,,,不敢相信. 首先可以发现,如果N个数中1出现的次数<=1的话,我们按不能在一个集合连无向边的话,连出的一定是一个二分图. 接下来我来证明一下: 因为 ...

  9. 什么是Hadoop?什么是HDFS?

    [学习笔记] 什么是Hadoop?什么是HDFS?马 克-to-win @ 马克java社区:Hadoop是Apache基金会开发的一个分布式系统基础架构.比如前面我们接触的Spring就是一个开发应 ...

  10. crontab 实际的应用

    每二天执行一次: 0 0 */2 * * command #注意分,时不能为星*,否则每分钟执行 每天零晨01,03执行: 0 01,03 * * * command 每2小时执行一次 0 */2 * ...