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. 刷题总结——bzoj2243染色

    题目: 题目背景 SDOI2011 DAY1 T3 题目描述 给定一棵有 n 个节点的无根树和 m 个操作,操作有 2 类:1.将节点 a 到节点 b 路径上所有点都染成颜色 c :2.询问节点 a  ...

  2. Wing IDE 6.0 算号器注册机代码

    我开发Python时喜欢用Wing IDE, 然后最近发现Wing IDE升级到6.0版本了, 但是之前能在5.1上用的算号器代码不能用在6.0上了, 所以就上网搜搜是否有相关算号器, 果然, 找到了 ...

  3. K-lord #1

    Memories 布雷芙,和YYJ就那样在那个初夏相遇了. 她,一头蓬松的长发,简单可爱的短袖. 他,带着那么灿烂阳光的笑容. 于是一切就变得很微妙.眼神有了温度手心有了潮湿. 那些天空里匆忙盛开的夏 ...

  4. 【CCF】棋局评估

    博弈论极小极大搜索,记忆化+状压 #include<iostream> #include<cstdio> #include<string> #include< ...

  5. 如何将文件上传到ftp

    方法1(推荐,炒鸡简单):双击我的电脑,在地址栏里输入你的ftp地址回车(比如: ftp://220.103.86.96),然后会弹出一个输入登录账号和密码的对话框,输入你的ftp账号和密码回车便进入 ...

  6. 表单禁用复制、粘贴、及右击菜单(contextmenu、oncopy、oncut、onpaste、onselectstart)

    禁用右键菜单,可以使用oncontextmenu属性: <textarea oncontextmenu="return false"></textarea> ...

  7. java 汉字保存到mysql 乱码

    保存之前正常,插入数据乱码 确认jsp mysql编码都确定为utf8 在连接数据库是加上编码 jdbc:mysql://localhost:3306/test?useUnicode=true& ...

  8. AC日记——最大子段和 洛谷 P1115

    题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入输出格式 输入格式: 输入文件maxsum1.in的第一行是一个正整数N,表示了序列的长度. 第2行包含N个绝对值不大于10000 ...

  9. Xib/Storyboard碰到不同版本的Xcode真是想死啊!

    Command /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/ ...

  10. 关于Lisp和函数式编程 & 各种语言对比 & TIOBE

    上一篇文章提到了,今天又读到Lisp的一些内容 <为什么Lisp如此先进>ruanyifeng(Link).关于Lisp的八卦,可以参考我前面两篇文章 http://www.cnblogs ...