Delphi使用Indy、ICS组件读取网页
使用Indy 10中TIdHTTP的例子:
代码usesIdHttp; . . . function HttpGet(const Url: string; var Html: string): Boolean; varHttpClient: TIdHTTP; beginResult := False;HttpClient := TIdHTTP.Create(nil);tryHtml := HttpClient.Get(Url);Result := True;excepton e: Exception dobeginend;end;HttpClient.Free; end;
Indy采用的是同步I/O的方式,而且在连接超时控制方面存在bug,因此TIdHttp.Get()有时会发生陷入死锁无法返回的问题。
使用ICS中THttpCli的例子:
usesHttpProt; . . . function HttpGet(const Url: string; var Html: string): Boolean; varHttpClient: THttpCli;DataLen: Int64;FailMsg: string; beginResult := False;HttpClient := THttpCli.Create(nil);HttpClient.URL := Url;HttpClient.NoCache := True;HttpClient.RcvdStream := TMemoryStream.Create;trytryHttpClient.Get;DataLen := HttpClient.RcvdStream.Size;SetLength(Html, DataLen);HttpClient.RcvdStream.Position := 0;HttpClient.RcvdStream.Read(PChar(Html)^, DataLen);Result := True;excepton E: EHttpException dobeginFailMsg := Format('Failed : %d %s',[HttpClient.StatusCode, HttpClient.ReasonPhrase]);end elseraise;end;finallyHttpClient.RcvdStream.Free;HttpClient.RcvdStream := nil;HttpClient.Free;end; end;
ICS使用的是异步I/O,其TFtpClient组件有Timout属性可以对连接超时进行控制,而THttpCli组件没有。但可以采用在定时器中调用THttpCli.Abort()取消连接的方式控制超时,也可以显式调用异步方法:
varHttpClient: THttpCli;DataLen: Int64;FailMsg: string;Tick: Cardinal;beginResult := False;HttpClient := THttpCli.Create(nil);HttpClient.URL := Url;HttpClient.NoCache := True;HttpClient.RcvdStream := TMemoryStream.Create;Tick := GetTickCount;trytryHttpClient.GetASync;while HttpClient.State <> httpReady do //检测HTTP状态beginif GetTickCount - Tick > 30*1000 then //此处设置了30S超时,可根据需要修改此数值beginHttpClient.Abort;Exit;end;Application.ProcessMessages;end;DataLen := HttpClient.RcvdStream.Size;SetLength(Html, DataLen);HttpClient.RcvdStream.Position := 0;HttpClient.RcvdStream.Read(PChar(Html)^, DataLen);Result := True;excepton E: EHttpException dobeginFailMsg := Format('Failed : %d %s',[HttpClient.StatusCode, HttpClient.ReasonPhrase]);end elseraise;end;finallyHttpClient.RcvdStream.Free;HttpClient.RcvdStream := nil;HttpClient.Free;end;end
转载于:https://www.cnblogs.com/china1/p/3395033.html
Delphi使用Indy、ICS组件读取网页相关推荐
- java gzip delphi_delphi 利用indy解码Gzip的网页
求人不如求已..唉... 直接用Fhttp.Compressor:= TIdCompressorZLibEx.Create(nil); 就OK了.. 另外Delphi2007下.. idhttp. ...
- delphi indy_使用Delphi和Indy发送电子邮件(和附件)
delphi indy Below are instructions for creating an "email sender" that includes an option ...
- 服务器不能显示中文,彻底解决delphi WebBroker服务器中文乱码 delphi WebBroker服务器不能显示中文网页 WebBroker中文显示乱码...
彻底解决delphi WebBroker服务器中文乱码 彻底解决WebBroker中文显示乱码 彻底解决delphi WebBroker服务器不能显示中文网页 这个问题被折腾惨啦! 网上一大堆,就没能 ...
- java抓取网页css,Java 读取网页Html资料
当前位置:我的异常网» HTML/CSS » Java 读取网页Html资料 Java 读取网页Html资料 www.myexceptions.net 网友分享于:2013-10-27 浏览:13 ...
- 使用vue组件搭建网页应用
关于如何创建vue项目请参考如何使用vue组件搭建网页并打包发布 这里我使用 vue init webpack-simple 创建一个简单的工程,我们关注的重点是 index.html 文件和 /sr ...
- 如何使用vue组件搭建网页并打包发布
vue组件化项目搭建及编译打包发布 引言 开发环境 开发环境介绍 开发环境安装 使用模板创建项目 编译及打包发布 引言 最近开始学习Vue,Vue 是一个前端框架,特点是数据绑定和组件化.网上很多教程 ...
- python网页表格读取_是否可以读取网页html表格数据?
我目前正在考虑一些自动读取网页数据.因此,有没有可能从网页中读取以下类型的表格:excel应该有一个值name of condion,Operator and Expressions.在 编辑> ...
- DELPHI怎样编写COM组件
元旦闲来无事,学习一下DELPHI怎样编写COM组件.结果一试才发现问题多多,要么是找不到接口,要么是找不到方法.查了很多资料,发现说的都不清楚.现在把我所学到的和大家分享一下,希望新学的人能少走弯路 ...
- java通过url获取网页内容_Java语言通过URL读取网页数据并保存到本地文件(代码实例)...
本文主要向大家介绍了Java语言通过URL读取网页数据并保存到本地文件(代码实例),通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. Java通过URL读取网页数据并保存到本地文件(代码 ...
最新文章
- jquery的页面加载完执行的函数
- 【c语言】求最大最小值
- 利用上下文常识,让AI读懂不完整人类指令
- shell 引号 解析 逗号_关于shell的单引号和双引号转义 以及特殊符号相关
- Python中的iteritems()和items()
- Educational Codeforces Round 40 (Rated for Div. 2)
- 【Julia】ERROR: UndefVarError: linspace not defined
- sca标准值_(整理)B超数据标准值.
- 程序员自我修养笔记1
- 程序员该如何选择工作以及如何做好职业规划?
- 计算机毕业论文性能测试怎么写,计算机毕业论文撰写技巧
- Spring整合JsonRpc
- 如何控制积分成本?常见的积分成本的核算方法
- Dreamweaver CS6安装教程
- 改变人类命运的造人计划
- ubuntu 18.04 英伟达显卡驱动
- 在vue中如何使用umy-ui
- Game Center
- 5类人最适合做程序员,你属于哪一类?
- 微信怎样开通账户升级服务器,微信支付商户账户升级常见问题
热门文章
- pdf转图片 java_有将pdf文件转图片的格式方法吗?
- 不同品牌的内存条可以混用吗_混用不同品牌护肤品的技巧
- 手机计算机数据消失了怎么恢复,电脑突然黑屏闪退之后怎么恢复丢失的数据
- Html图片懒加载动画,Intersection Observer实现滚动到相应区域执行动画及图片懒加载...
- java方法和变量修饰符有哪些_死磕Java基础---类,变量和方法的修饰符
- AD域机器如何指定时钟服务器,active-directory – 如何让我的域控制器与正确的外部时间源同步?...
- 朴素贝叶斯算法和逻辑回归算法的区别?
- 程序员如何写好一份简历去找工作?
- 文明重启服务器维护怎么卡进去,文明重启更新之后进不去,具体玩法介绍
- jq画布插件_超炫HTML 5开发的jQuery进度条插件