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. OpenJ_Bailian3375

    Farmer John has decided to reward his cows for their hard work by taking them on a tour of the big c ...

  2. Python 可变对象与不可变对象

    1. 不可变(immutable):int.字符串(string).float.(数值型number).元组(tuple) 可变(mutable):字典型(dictionary).列表型(list) ...

  3. 插头DP--URAL1519Formula 1

    去年的老朋友.挺怀念的,回来看看. $n \leq 12,m \leq 12$,$n*m$的01矩形,问在0中走路的欧拉回路数.答案保证longlong范围. 先设计插头:左右括号和空插头:然后分3* ...

  4. FGrowth算法

    一:背景 http://www.cnblogs.com/aijianiula/p/5397857.html 上节中,总结了频繁项集挖掘的最基本算法:Apriori算法.这篇文章写下它的改进算法FGro ...

  5. Xen虚拟化

    Xen虚拟化基础 Xen虚拟化类型 hypervisor Xen组件 Xen hypervisor Colletion CPU.Memory.Interrupter Domain0 ---> D ...

  6. Laravel 视图中的url

    <a href="{{ url('url') }}">url</a> <a href="{{ action('StudentControll ...

  7. Codeforces 515E Drazil and Park (ST表)

    题目链接 Drazil and Park 中文题面 传送门 如果他选择了x和y,那么他消耗的能量为dx + dx + 1 + ... + dy - 1 + 2 * (hx + hy). 把这个式子写成 ...

  8. LCA rmq st model

    LCA:倍增 memset(p,-,sizeof(p)); inline void dfs(int u) { ;i=e[i].next) { int v=e[i].v; ) { deep[v]=dee ...

  9. JStorm学习

    一.简介 JStorm是一个分布式实时计算引擎.JStorm是一个类似于Hadoop MapReduce的系统,用户按照指定的接口实现一个任务,然后将这个任务交给JStorm系统,JStorm将这个任 ...

  10. Linux使用screen实现关闭ssh连接的情况下,让程序继续在后台运行

    Ubuntu默认没有安装screen,需要手动安装. 安装命令: sudo apt-get install screen 简单的操作方法: 直接输入命令 screen 进入screen子界面,此时pu ...