Delphi使用Indy、ICS组件读取网页
2011-03-22 17:04
645 查看
Delphi使用Indy、ICS组件读取网页
使用Indy 10中TIdHTTP的例子:代码
uses
IdHttp;
.
.
.
function HttpGet(const Url: string; var Html: string): Boolean;
var
HttpClient: TIdHTTP;
begin
Result := False;
HttpClient := TIdHTTP.Create(nil);
try
Html := HttpClient.Get(Url);
Result := True;
except
on e: Exception do
begin
end;
end;
HttpClient.Free;
end;
Indy采用的是同步I/O的方式,而且在连接超时控制方面存在bug,因此TIdHttp.Get()有时会发生陷入死锁无法返回的问题。
使用ICS中THttpCli的例子:
代码
uses
HttpProt;
.
.
.
function HttpGet(const Url: string; var Html: string): Boolean;
var
HttpClient: THttpCli;
DataLen: Int64;
FailMsg: string;
begin
Result := False;
HttpClient := THttpCli.Create(nil);
HttpClient.URL := Url;
HttpClient.NoCache := True;
HttpClient.RcvdStream := TMemoryStream.Create;
try
try
HttpClient.Get;
DataLen := HttpClient.RcvdStream.Size;
SetLength(Html, DataLen);
HttpClient.RcvdStream.Position := 0;
HttpClient.RcvdStream.Read(PChar(Html)^, DataLen);
Result := True;
except
on E: EHttpException do
begin
FailMsg := Format('Failed : %d %s',
[HttpClient.StatusCode, HttpClient.ReasonPhrase]);
end else
raise;
end;
finally
HttpClient.RcvdStream.Free;
HttpClient.RcvdStream := nil;
HttpClient.Free;
end;
end;
ICS使用的是异步I/O,其TFtpClient组件有Timout属性可以对连接超时进行控制,而THttpCli组件没有。但可以采用在定时器中调用THttpCli.Abort()取消连接的方式控制超时,也可以显式调用异步方法:
http://www.cnblogs.com/ddgg/archive/2010/08/25/1808058.html
相关文章推荐
- Delphi使用Indy、ICS组件读取网页
- Delphi使用Indy、ICS组件读取网页
- Delphi使用Indy、ICS组件读取网页
- 在.net中使用xmlhttp组件读取网页源码
- Delphi组件indy 10中IdTCPServer修正及SSL使用心得
- Delphi组件indy 10中IdTCPServer修正及SSL使用心得
- Delphi组件indy 10中IdTCPServer修正及SSL使用心得
- 在.net中使用xmlhttp组件读取网页源码
- 在.net中使用xmlhttp组件读取网页源码
- delphi 使用webbrowser取得网页中表格(Table)内容的正确方法
- Delphi使用ADO组件访问ACCESS数据入门例程
- 零基础写python爬虫之使用urllib2组件抓取网页内容
- Delphi2009中使用dbExpress组件访问MySql(登陆页面)
- 解决Delphi中使用TWebBrowser控件访问带Flash网页时提示报错的问题
- delphi强制WebBrowser控件使用指定版本显示网页
- Delphi中使用python脚本读取Excel数据
- delphi中使用TIdFTP组件笔记
- delphi的 ics的使用例子,ftp客户端上传的例子。
- asp.net使用组件koogra读取Excel数据批量上传导入
- Delphi程序流程三(2)(while)PS:最简单的任务管理器( 组件LISTVIEW的用法 增加LISTVIEW的读取 删除)