Delphi IDHTTP用法详解

[delphi] view plaincopyprint?

  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/yanjiaye520/article/details/8199016

时间: 2024-10-19 10:34:24

Delphi IDHTTP用法详解的相关文章

delphi TStringList 用法详解

delphi TStringList 用法详解. TStringList 常用方法与属性 : var List: TStringList; i: Integer; begin List := TStringList.Create; List.Add('Strings1'); {添加} List.Add('Strings2'); List.Exchange(0,1); {置换} List.Insert(0,'Strings3'); {插入} i := List.IndexOf('Strings1'

Delphi TStringHelper用法详解

Delphi TStringHelper用法详解 (2013-08-27 22:45:42) 转载▼ 标签: delphi_xe5 it 分类: Delphi Delphi XE4的TStringHelper,对操作字符串进一步带来更多的方法,使用这些方法才可以实现跨平台的代码. System.SysUtils.TStringHelper 大小写转换:-------------------------------------------------------------------------

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/

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

Delphi中Spcomm使用属性及用法详解 Delphi是一种具有 功能强大.简便易用和代码执行速度快等优点的可视化快速应用开发工具,它在构架企业信息系统方面发挥着越来越重要的作用,许多程序员愿意选择 Delphi作为开发工具编制各种应用程序.但是,美中不足之处是 Delphi没有自带的串口通信控件,在它的帮助文档里也没有提及串口通信,这就给编制通信程序的开发人员带来许多不便. 目前,利用 Delphi实现串口通信的常用的方法有 3种:一是利用控件,如 MSCOMM控件和 SPCOMM控件:二

VC++中MessageBox的常见用法详解

消息框是个很常用的控件,属性比较多,本文列出了它的一些常用方法,及指出了它的一些应用场合.         1.MessageBox("这是一个最简单的消息框!");         2.MessageBox("这是一个有标题的消息框!","这是标题");         3.MessageBox("这是一个确定 取消的消息框!","这是标题", MB_OKCANCEL );         4.Messa

js的offsetParent属性用法详解

js的offsetParent属性用法详解:此属性是javascript中较为常用的属性,对于它的良好掌握也是非常有必要的,下面就通过代码实例介绍一下它的用法,希望能够给需要的朋友带来一定的帮助.一.基本介绍:此属性可以返回距离指定元素最近的采用定位(position属性值为fixed.relative或者absolute)父级元素,如果父级元素中没有采用定位的元素,则返回body对象的引用.语法结构: obj.offsetParent 二.代码实例: <!DOCTYPE html> <

python处理word文件:win32com用法详解

目标:用python处理doc文件 方法:引入win32com模块 ************************************************************************** 一.安装 ************************************************************************** 首先要先下载安装win32com模块(起先在linux下装不成功,后在windows下面成功了...) 下载地址:http

jQuery 事件用法详解

jQuery 事件用法详解 目录 简介 实现原理 事件操作 绑定事件 解除事件 触发事件 事件委托 事件操作进阶 阻止默认事件 阻止事件传播 阻止事件向后执行 命名空间 自定义事件 事件队列 jquery中文文档 简介 jquery 之所以成为最受欢迎的前端库,很大一部分是得益于它的事件具有良好的语义,优秀的兼容性,并且便于管理和扩展. 在这里我会介绍 jquery 事件的一些比较基础的用法. 实现原理 jquery 事件脱胎于浏览器的 addEventListener (W3) 和 attac

(转)ProgressDialog用法详解

转载自: ProgressDialog用法详解 ProgressDialog的基本用法 ProgressDialog为进度对话框.android手机自带的对话框显得比较单一,我们可以通过ProgressDialog来自己定义对话框中将要显示出什么东西. 首先看看progressDialog里面的方法 setProgressStyle:设置进度条风格,风格为圆形,旋转的.  setTitlt:设置标题  setMessage:设置提示信息:  setIcon:设置标题图标:  setIndeter