使用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组件读取网页相关推荐

  1. java gzip delphi_delphi 利用indy解码Gzip的网页

    求人不如求已..唉...  直接用Fhttp.Compressor:= TIdCompressorZLibEx.Create(nil);  就OK了.. 另外Delphi2007下.. idhttp. ...

  2. delphi indy_使用Delphi和Indy发送电子邮件(和附件)

    delphi indy Below are instructions for creating an "email sender" that includes an option ...

  3. 服务器不能显示中文,彻底解决delphi WebBroker服务器中文乱码 delphi WebBroker服务器不能显示中文网页 WebBroker中文显示乱码...

    彻底解决delphi WebBroker服务器中文乱码 彻底解决WebBroker中文显示乱码 彻底解决delphi WebBroker服务器不能显示中文网页 这个问题被折腾惨啦! 网上一大堆,就没能 ...

  4. java抓取网页css,Java 读取网页Html资料

    当前位置:我的异常网» HTML/CSS » Java 读取网页Html资料 Java 读取网页Html资料 www.myexceptions.net  网友分享于:2013-10-27  浏览:13 ...

  5. 使用vue组件搭建网页应用

    关于如何创建vue项目请参考如何使用vue组件搭建网页并打包发布 这里我使用 vue init webpack-simple 创建一个简单的工程,我们关注的重点是 index.html 文件和 /sr ...

  6. 如何使用vue组件搭建网页并打包发布

    vue组件化项目搭建及编译打包发布 引言 开发环境 开发环境介绍 开发环境安装 使用模板创建项目 编译及打包发布 引言 最近开始学习Vue,Vue 是一个前端框架,特点是数据绑定和组件化.网上很多教程 ...

  7. python网页表格读取_是否可以读取网页html表格数据?

    我目前正在考虑一些自动读取网页数据.因此,有没有可能从网页中读取以下类型的表格:excel应该有一个值name of condion,Operator and Expressions.在 编辑> ...

  8. DELPHI怎样编写COM组件

    元旦闲来无事,学习一下DELPHI怎样编写COM组件.结果一试才发现问题多多,要么是找不到接口,要么是找不到方法.查了很多资料,发现说的都不清楚.现在把我所学到的和大家分享一下,希望新学的人能少走弯路 ...

  9. java通过url获取网页内容_Java语言通过URL读取网页数据并保存到本地文件(代码实例)...

    本文主要向大家介绍了Java语言通过URL读取网页数据并保存到本地文件(代码实例),通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. Java通过URL读取网页数据并保存到本地文件(代码 ...

最新文章

  1. jquery的页面加载完执行的函数
  2. 【c语言】求最大最小值
  3. 利用上下文常识,让AI读懂不完整人类指令
  4. shell 引号 解析 逗号_关于shell的单引号和双引号转义 以及特殊符号相关
  5. Python中的iteritems()和items()
  6. Educational Codeforces Round 40 (Rated for Div. 2)
  7. 【Julia】ERROR: UndefVarError: linspace not defined
  8. sca标准值_(整理)B超数据标准值.
  9. 程序员自我修养笔记1
  10. 程序员该如何选择工作以及如何做好职业规划?
  11. 计算机毕业论文性能测试怎么写,计算机毕业论文撰写技巧
  12. Spring整合JsonRpc
  13. 如何控制积分成本?常见的积分成本的核算方法
  14. Dreamweaver CS6安装教程
  15. 改变人类命运的造人计划
  16. ubuntu 18.04 英伟达显卡驱动
  17. 在vue中如何使用umy-ui
  18. Game Center
  19. 5类人最适合做程序员,你属于哪一类?
  20. 微信怎样开通账户升级服务器,微信支付商户账户升级常见问题

热门文章

  1. pdf转图片 java_有将pdf文件转图片的格式方法吗?
  2. 不同品牌的内存条可以混用吗_混用不同品牌护肤品的技巧
  3. 手机计算机数据消失了怎么恢复,电脑突然黑屏闪退之后怎么恢复丢失的数据
  4. Html图片懒加载动画,Intersection Observer实现滚动到相应区域执行动画及图片懒加载...
  5. java方法和变量修饰符有哪些_死磕Java基础---类,变量和方法的修饰符
  6. AD域机器如何指定时钟服务器,active-directory – 如何让我的域控制器与正确的外部时间源同步?...
  7. 朴素贝叶斯算法和逻辑回归算法的区别?
  8. 程序员如何写好一份简历去找工作?
  9. 文明重启服务器维护怎么卡进去,文明重启更新之后进不去,具体玩法介绍
  10. jq画布插件_超炫HTML 5开发的jQuery进度条插件