Delphi IDHTTP用法详解
一、IDHTTP的基本用法
- IDHttp和WebBrowser一样,都可以实现抓取远端网页的功能,但是http方式更快、更节约资源,缺点是需要手动维护cook,连接等
- IDHttp的创建,需要引入IDHttp
- procedure InitHttp();
- begin
- http := TIdHTTP.Create(nil);
- http.ReadTimeout := 30000;
- http.OnRedirect := OnRedirect;
- http.Request.Accept := 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*';
- http.Request.AcceptLanguage := 'zh-cn';
- http.Request.ContentType := 'application/x-www-form-urlencoded';
- http.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322)';
- http.ProxyParams.ProxyServer := '代理服务器地址';
- http.ProxyParams.ProxyPort := '代理服务器端口';
- end;
- 二、如何取得服务端返回的cookie信息,并添加到http的request对象中
- procedure Setcookie;
- var
- i: Integer;
- tmp, cookie: String;
- begin
- cookie := '';
- for i := 0 to http.Response.RawHeaders.Count - 1 do
- begin
- tmp := http.Response.RawHeaders[i];
- if pos('set-cookie: ', LowerCase(tmp)) = 0 then Continue;
- tmp := Trim(Copy(tmp, Pos('Set-cookie: ', tmp) + Length('Set-cookie: '), Length(tmp)));
- tmp := Trim(Copy(tmp, 0, Pos(';', tmp) - 1));
- if cookie = '' then cookie := tmp else cookie := cookie + '; ' + tmp;
- end;
- if cookie <> '' then
- begin
- for i := 0 to http.Request.RawHeaders.Count - 1 do
- begin
- tmp := http.Request.RawHeaders[i];
- if Pos('cookie', LowerCase(tmp)) = 0 then Continue;
- http.Request.RawHeaders.Delete(i);
- Break;
- end;
- http.Request.RawHeaders.Add('cookie: ' + cookie);
- end;
- end;
- 三、如何取得网页中的所有连接,对代码做修改你也可以实现查找所有图片等等
- function GetURLList(Data: String): TStringList;
- var
- i: Integer;
- List: TStringList;
- tmp: String;
- function Split(Data, Node: String): TStringList;
- var
- Count, i, j: Integer;
- function GetFieldCount(Data, Node: String): Integer;
- var
- i: Integer;
- begin
- Result := -1;
- i := Pos(Node, Data);
- if i = 0 then Exit;
- Result := 0;
- while i <> 0 do
- begin
- Inc(Result);
- Delete(Data, 1, i + Length(Node) - 1);
- i := Pos(Node, Data);
- end;
- end;
- begin
- Result := TStringList.Create;
- Count := GetFieldCount(Data, Node);
- for i := 0 to Count - 1 do
- begin
- j := Pos(Node, Data);
- Result.Add(Copy(Data, 1, j - 1));
- Delete(Data, 1, j + Length(Node) - 1);
- end;
- Result.Add(Data);
- end;
- begin
- Result := TStringList.Create;
- try
- List := split(Data, 'href=');
- for i := 1 to List.Count - 1 do
- begin
- tmp := List[i];
- tmp := Copy(tmp, 0, Pos('</a>', tmp) - 1);
- tmp := Copy(tmp, 0, Pos('>', tmp) - 1);
- if Pos(' ', tmp) <> 0 then
- tmp := Copy(tmp, 0, Pos(' ', tmp) - 1);
- tmp := Q_ReplaceStr(tmp, Char(34), '');
- tmp := Q_ReplaceStr(tmp, Char(39), '');
- if not Compare(CI.Key, tmp) then Continue;
- if Copy(tmp, 1, 7) <> 'http://' then
- begin
- if Copy(tmp, 1, 1) = '.' then tmp := StringReplace(tmp, '.', '', []);
- if Copy(tmp, 1, 1) = '.' then tmp := StringReplace(tmp, '.', '', []);
- try
- tmp := 'http://' + http.URL.Host + ':' + http.URL.Port + http.URL.Path + tmp;
- except
- end;
- end;
- if Result.IndexOf(tmp) <> -1 then Continue;
- Result.Add(tmp);
- end;
- FreeAndNil(List);
- except
- end;
- end;
- 四、如何模拟http的get方法打开一个网页
- function GetMethod(http: TIDhttp; URL: String; Max: Integer): String;
- var
- RespData: TStringStream;
- begin
- RespData := TStringStream.Create('');
- try
- try
- Http.Get(URL, RespData);
- Http.Request.Referer := URL;
- Result := RespData.DataString;
- except
- Dec(Max);
- if Max = 0 then
- begin
- Result := '';
- Exit;
- end;
- Result := GetMethod(http, URL, Max);
- end;
- finally
- FreeAndNil(RespData);
- end;
- end;
- 五、如何模拟http的post方法提交一个网页
- function PostMethod(URL, Data: String; max: Integer): String;
- var
- PostData, RespData: TStringStream;
- begin
- RespData := TStringStream.Create('');
- PostData := TStringStream.Create(Data);
- try
- try
- if http = nil then Exit;
- Http.Post(URL, PostData, RespData);
- Result := RespData.DataString;
- http.Request.Referer := URL;
- except
- Dec(Max);
- if Max = 0 then
- begin
- Result := '';
- Exit;
- end;
- Result := PostMethod(URL, Data, Max);
- end;
- finally
- http.Disconnect;
- FreeAndNil(RespData);
- FreeAndNil(PostData);
- end;
- end;
- 六、伪造session
- var
- My_Cookie,tmpcookie:string;
- begin
- aIdHttp.Get('http://www.huochepiao.net/');
- tmpcookie:=aIdHttp.Request.CustomHeaders.Values['Set-Cookie'];
- if Pos(';',tmpcookie)>0 then
- My_Cookie:=LeftBStr(tmpcookie,Pos(';',tmpcookie)-1)
- else
- My_Cookie:= tmpcookie;
- //
- aIdHTTP.Request.CustomHeaders.Clear;
- aIdHTTP.Request.CustomHeaders.Add('Cookie:'+My_COOKIE);
- end;
Delphi IDHTTP用法详解的更多相关文章
- Delphi IDHTTP用法详解(六种用法)
一.IDHTTP的基本用法 IDHttp和WebBrowser一样,都可以实现抓取远端网页的功能,但是http方式更快.更节约资源,缺点是需要手动维护cook,连接等 IDHttp的创建,需要引入ID ...
- Delphi TStringHelper用法详解
Delphi TStringHelper用法详解 (2013-08-27 22:45:42) 转载▼ 标签: delphi_xe5 it 分类: Delphi Delphi XE4的TStringHe ...
- delphi TStringList 用法详解
转自: http://blog.163.com/you888@188/blog/static/67239619201472365642633/ delphi TStringList 用法详解 2014 ...
- IDHTTP用法详解 good
一.IDHTTP的基本用法 IDHttp和WebBrowser一样,都可以实现抓取远端网页的功能,但是http方式更快.更节约资源,缺点是需要手动维护cook,连接等 IDHttp的创建,需要引入ID ...
- 教程-Delphi中Spcomm使用属性及用法详解
Delphi中Spcomm使用属性及用法详解 Delphi是一种具有 功能强大.简便易用和代码执行速度快等优点的可视化快速应用开发工具,它在构架企业信息系统方面发挥着越来越重要的作用,许多程序员愿意选 ...
- delphi中Application.MessageBox函数用法详解
delphi中Application.MessageBox函数用法详解 Application.MessageBox是TApplication的成员函数,声明如下:functionTApplicati ...
- Delphi XE4 TStringHelper用法详解
原文地址:Delphi XE4 TStringHelper用法详解作者:天下为公 Delphi XE4的TStringHelper,对操作字符串进一步带来更多的方法,估计XE5还能继续用到. Syst ...
- Delphi Format函数功能及用法详解
DELPHI中Format函数功能及用法详解 DELPHI中Format函数功能及用法详解function Format(const Format: string; const Args: array ...
- C#中string.format用法详解
C#中string.format用法详解 本文实例总结了C#中string.format用法.分享给大家供大家参考.具体分析如下: String.Format 方法的几种定义: String.Form ...
随机推荐
- Python爬虫学习:Python内置的爬虫模块urllib库
urllib库 urllib库是Python中一个最基本的网络请求的库.它可以模拟浏览器的行为发送请求(都是这样),从而获取返回的数据 urllib.request 在Python3的urllib库当 ...
- 【转载】log4j详解使用
log4j详解 日志论 在应用程序中输出日志有有三个目的:(1)监视代码中变量的变化情况,把数据周期性地记录到文件中供其他应用进行统计分析工作. (2)跟踪代码运行进轨迹,作为日后审计的依据. ...
- ubuntu编译安装protobuf
测试环境:Ubuntu 16.04 LTS 到protobuf的release页面 下载源码:https://github.com/protocolbuffers/protobuf/releases/ ...
- python 获取函数调用者
import traceback def _mode(): print "hi---------------------------" print traceback.extrac ...
- java几个经典的算法题目----------查询子串和等于已知数字
给出一个排序好的数组和一个数,求数组中连续元素的和等于所给数的子数组 public class testClockwiseOutput { public static void main(String ...
- typeof, offsetof 和container_of
要理解Linux中实现的双向循环链表("侵入式"链表),首先得弄明白宏container_of. 本文尝试从gcc的关键字typeof和宏offsetof入手,循序渐进地剖析宏co ...
- SDSM框架
标题解释 SDSM指的是SpringMVC+Dubbo+Spring+Mybatis的框架 ------------------------------------------------------ ...
- vue-pdf的3.3.1版本build后多生成168个js文件
当同事使用vue-pdf来浏览pdf之后,就发现build之后一堆散乱的js文件,真可怕! 果然google之后是它的原因.参考:Vue-pdf create 168 excess bundles i ...
- DataGridView 隔行显示不同的颜色
两种方法 第一种 DataGridview1.Rows[i].DefultCellStyle.backcolor 第二种 AlternatingRowsDefutCellstyle 属性 获取或设置应 ...
- megajson 高性能的json序列化、反序列化工具
go 自带的 encoding/json 支持json的序列化和反序列化, 然而它是基于反射的,有下面几个缺点: 反射是性能差的代名词, 并且无法在编译时进行优化. 只有 Public 字段才可以,反 ...