一、IDHTTP的基本用法 

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

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

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

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

  2. Delphi TStringHelper用法详解

    Delphi TStringHelper用法详解 (2013-08-27 22:45:42) 转载▼ 标签: delphi_xe5 it 分类: Delphi Delphi XE4的TStringHe ...

  3. delphi TStringList 用法详解

    转自: http://blog.163.com/you888@188/blog/static/67239619201472365642633/ delphi TStringList 用法详解 2014 ...

  4. IDHTTP用法详解 good

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

  5. 教程-Delphi中Spcomm使用属性及用法详解

    Delphi中Spcomm使用属性及用法详解 Delphi是一种具有 功能强大.简便易用和代码执行速度快等优点的可视化快速应用开发工具,它在构架企业信息系统方面发挥着越来越重要的作用,许多程序员愿意选 ...

  6. delphi中Application.MessageBox函数用法详解

    delphi中Application.MessageBox函数用法详解 Application.MessageBox是TApplication的成员函数,声明如下:functionTApplicati ...

  7. Delphi XE4 TStringHelper用法详解

    原文地址:Delphi XE4 TStringHelper用法详解作者:天下为公 Delphi XE4的TStringHelper,对操作字符串进一步带来更多的方法,估计XE5还能继续用到. Syst ...

  8. Delphi Format函数功能及用法详解

    DELPHI中Format函数功能及用法详解 DELPHI中Format函数功能及用法详解function Format(const Format: string; const Args: array ...

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

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

随机推荐

  1. linux mint 18.2 install postgresql

    https://www.postgresql.org/download/linux/ubuntu/ 1 check Xenial16.04 2  创建文件  /etc/apt/sources.list ...

  2. 通过面试题,让我们来了解Collection

    前言 欢迎关注公众号:Coder编程 获取最新原创技术文章和相关免费学习资料,随时随地学习技术知识!** 本章主要介绍Collection集合相关知识,结合面试中会提到的相关问题进行知识点的梳理.希望 ...

  3. AngularJS 的常用特性(一)

    前言:AngularJS 是一款来自 Google 的前端 JS 框架,该框架已经被应用到了 Google 的多款产品中,这款框架最核心特性有:MVC.模块化.自动化双向数据绑定.语义化标签.依赖注入 ...

  4. Java reflect 反射 2

    Constructor Constructor表示一个类的构造器.即构造器的反射对象! 它是Class的一个组成部门,所以需要先得到Class,再通过Class的方法得到Constructor 1获取 ...

  5. C语言读写配置文件--转载

    http://www.oschina.net/code/snippet_4873_2503 [].[代码] CException.h 跳至 [] [] [] /******************** ...

  6. 【LeetCode题解】530_二分搜索树的最小绝对值差

    目录 [LeetCode题解]530_二分搜索树的最小绝对值差 描述 方法一.中序遍历二分搜索树 思路 Java 代码 Python 代码 [LeetCode题解]530_二分搜索树的最小绝对值差 描 ...

  7. 费了个劲的git

    终于学会了git,表示不容易,个人表示总结一下... 1.设置个人PC上的git  master路径,ok没问题,用时1min 2.从码云代码仓库克隆已写代码,也很简单,用时2min 3.将本机器内文 ...

  8. switch case :在JDK 7中,又加入了对String类型的支持,从此不用再写If-Else来判断字符串了

    switch的case语句可以处理int,short,byte,char类型的值, 因为short,byte,char都会转换成int进行处理,这一点也可以从生成的字节码看出. char a = 'e ...

  9. WCF-绑定模型(二)

    二.绑定元素 每一个类型的绑定最重要的就是绑定元素了,每个绑定的功能特性都由绑定元素决定.BasicHttpBinding由用于编码的TextMessageEncodingBindingElement ...

  10. Java如何操作对象(bean)进行动态排序?

    原文出自:https://blog.csdn.net/seesun2012 简介如题:Java如何操作对象(bean)进行动态排序?Java实体类(bean)动态排序? 原理:利用反射根据指定的属性值 ...