- 浏览: 154655 次
- 性别:
- 来自: 天津
最新评论
-
znhyz1:
Ubuntu 12.04 64位系统需要以下额外俩依赖包sud ...
Ubuntu 11.10下笔记本ThinkPad E520中ATI显卡驱动的安装 -
znhyz1:
bmml123 写道您好,我的按您说的做了 rfkill li ...
Ubuntu--解决Thinkpad E420 安装ubuntu 等linux系统无线网卡问题 -
bmml123:
您好,我的按您说的做了
rfkill list命令后只显示
...
Ubuntu--解决Thinkpad E420 安装ubuntu 等linux系统无线网卡问题 -
yuting_lv:
引用sudo cp /etc/apt/sources.list ...
Ubuntu11.04更新源 -
znhyz1:
为什么不用root就登录不了sqlplus
Ubuntu Server下安装Oracle-xe数据库
一、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;
转载地址:http://www.cnblogs.com/myjgzs/archive/2010/04/30/1725068.html
发表评论
-
Delphi版RC4加密算法
2012-05-27 00:54 3052{============================== ... -
Delphi 中StringList带空格分割
2012-05-20 15:00 2671正常情况下,用Delimiter进行分格时,无论分割符为什么, ... -
简述个人知识体系建立
2012-05-18 12:58 860自互联网在中国普及开 ... -
WinAPI: ShellExecute打开外部程序或文件
2012-05-18 12:50 1963ShellExecute( hWnd: HWND; ... -
DataSnap Stream 传递大数据
2012-05-03 17:08 1966DataSnap可以直接传递和返回TStrea ... -
Delphi7中WebBrowser控件HTML源码的读写
2011-08-23 10:15 3771写入: procedure TForm1.LoadStrea ... -
Delphi中ExtractFilePath()及其相近函数用法
2011-08-11 15:09 2791ExtractFilePath() 功能:返回完整文件名中 ... -
Delphi中IdTcpServer 用户掉线检测方法
2011-08-10 21:53 6120正常情况下,当登陆用户异常掉线并不会通知服务器,这时服务器一直 ... -
Delphi中Indy 10的安装和老版本的卸载
2011-08-10 15:25 12136Indy 10的安装和老版本的卸载 Indy 10下载地址: ... -
Delphi中ClientDataSet浅析
2011-08-10 12:23 5156与一般的数据 ... -
Delphi中ClientDataSet的数据查找
2011-08-09 20:36 4427ClientDataSet的数据查找。我所介绍的心得和技巧都是 ... -
Delphi中ClientDataSet的用法小结
2011-08-09 20:20 9860TClientDataSet控件 ... -
Delphi组件安装方法
2011-08-06 23:53 1247Delphi组件安装方法 由于组件提供的方式不同,所以安装的 ... -
Delphi中TStringList的用法
2011-08-06 23:52 1676TStrings是一个抽象类,在实际开发中,是除了基本类型外, ... -
Delphi7控件FastReport的安装方法
2011-08-06 22:28 5945系统环境: Windows XP 标 ... -
Delphi中扩展的字符串操作函数
2011-08-06 17:05 1294{*****************************扩 ... -
Delphi得到汉字的首字母
2011-08-06 17:03 1182function GetPYIndexChar( hzchar ... -
Delphi获取计算机名称及IP地址
2011-08-06 16:59 1615function GetComputerName:Stri ... -
Delphi控件cxGrid 如何动态创建列?
2011-08-06 16:52 3604var i: Integer; Column: TcxG ... -
Delphi控件cxGrid数据录入
2011-08-06 16:50 2886一、数据录入 1、 在TcxGridDBTableView ...
相关推荐
delphi 7 idhttp post 的8种使用方法(含源码),介绍了8种使用方法,供学习交流使用。
delphi 7 idhttp post 的8种使用方法(含源码),介绍了8种使用方法,供学习交流使用。
服务器监听来自idHttp的数据,运行两个实例中的程序,可以相互发送文字信息或文件了,
delphi +idttp 的post使用。 post的使用方法,很简单。 清晰明了。
使用方法: 由于水平有限,没能在DELPHI中拿到垃圾微信小商店的TOKEN和COOKIE,所以要自己在浏览器中拿到这两个东西(TOKEN在地址栏中,COOKIE在哪,搞开发的都知道),然后填到对应的位置就可以
使用Indy的IdHTTP控件模拟网站的Get和POST操作
向web认证服务器通过https接口post认证数据,delphi2005正常使用。最初的的时候采用indy控件,IdHTTP和IdSSLIOHandlerSocketOpenSSL配合,但是没有成功,对方服务器连接后立即断开链接,不返回任何数据,后来通过...
在开发中遇到了几个问题,现写出来供需要的朋友参考。 1. SSL问题,用的是indyhttp控件,使用SSL时需要添加 IdSSLIOHandlerSocketOpenSSL1 组件 然后 idhttp的iohandler 属性指向 IdSSLIOHandlerSocketOpenSSL1。 ...
该客户端是在Delphi XE2中构建的,但在以后的版本中可能会很好地工作。 用法 这个非常简单的控制台应用程序会创建一个RESTful PUT请求,以添加一个虚拟的待办事项。 program SimpleRestRequestSample; { $APPTYPE ...
实现的方法由IdHTTP组件完成,通过本例我们可掌握try…finally…end和try…except…end结构的用法,流格式的使用和基本的ini文件的操作。例子代码虽然多了点,不过分解来看重点就在DownLoadFile()函数,自己...
使用方法: 1.libeay32.dll和ssleay32.dll拷到exe所在目录下即可。 2.IdSSLIOHandlerSocket1属性面板设置SSLOption的Method为sslvSSLv23 2.代码只需: IdHttp1.IOHandler:= IdSSLIOHandlerSocket1; memo1.text:= ...
如果有哪位高手能解决这个问题,请mail我 <br/>使用方法: 先使用快车类的软件将大量包含图片连接地址的网页源文件下载到本地,再利用本软件将这批文件打开并分析地址。 就可以得到大批图片地址列表...