已知一个网址,如何获得该网址对应的html源代码,以字符串的形式?在delphi中如何实现?今天不解决,没饭吃了
解决方案 »
- 请问如何找到网上邻居的列表?
- 我做的一个纯DHTM的游戏,htm格式的,大家来看原代码!!
- 窗体中有10个动态数组的label,edit,如何寻其进行数据更新,其中的label与数据库中的字段名称相同,分不足可以再加
- [一段精彩的网恋故事,转贴]我和网友的第一次亲密接触。。。
- 我想打印表格式的报表,就是一行中各个数据段用竖线分开,请高手指教!(60)
- 关于ODBC问题?(100分)
- 怎样将一个文件文件读入一个数组
- 一直不会使用类的CREATE方法,想学习一下做一个类的实例,然后再取消,请举个例子
- 如何在两个数据库中传递数据?(在线等待)
- TTrayNotifyIcon怎么得到﹐如何使用呢﹗
- 有B/S下开发的资料不?
- 如何监视窗体上的Components??
st: TStringStream;
st := TStringStream.Creat('');
IdHTTP1.Get('网址',st);
ShowMessage(st.DataString);
st.Free;
for i:=14 to 20 do
begin
str_url0 := 'http://searchjob.chinahr.com/BrowseOneJobInfo.aspx?jid=222002008805230002';
str_url := str_url0+IntToStr(i)+'&createdate=2006-01-12';
//Memo1.Text := str_url;
st := TStringStream.Create('');
IdHTTP1.Get(str_url,st);
str_content := st.DataString;
//Memo1.Text := str_content;
st.Free;
with ADOQuery1 do
begin
Close;
sql.Clear;
SQL.Add('insert into temp(webinfo,url,content) values(:prm_webinfo,:prm_url,:prm_content)');
Parameters.ParamByName('prm_webinfo').Value := str_webinfo;
Parameters.ParamByName('prm_url').Value := str_url;
Parameters.ParamByName('prm_content').Value := str_content;
Prepared;
ExecSQL;
//st.Free;
end;
//ShowMessage(str_url0);
end;
我在这段代码中,得到的某些链接不存在的,所以会报错,也得不到str_content := st.DataString;如何避免这个问题呢?
上面代码效率过低,如何解决这个问题?多线程如何实现?
初次接触,高手指教!
效率低这有可能是网速慢或服务器反应慢,这很难解决的。
最好打开IdHTTP1.HandleRedirects := True;
和设定ReadTimeOut属性。
谢谢您的耐心解答,在多线程方面,还没接触过。我主要想提高性能。
IdHTTP, IdTCPConnection, IdTCPClient, Classes, Dialogs, Graphics, Controls,
SysUtils, Windows, Messages, Variants, StdCtrls;type
PStr = ^String;
PBnl = ^Boolean; THTMLThread = class(TThread) private
FsHTMLCode: PStr;
FiState: PBnl;
FURL: String; protected
procedure Execute; override; public
constructor Create(AURL: String; var AHTMLCode: String; var AState: Boolean); end; THTML = class(THTMLThread);implementation{ TCommandThread }constructor THTMLThread.Create(AURL: String; var AHTMLCode: String;
var AState: Boolean);
begin
FURL := AURL;
FsHTMLCode := @AHTMLCode;
FiState := @AState;
FreeOnTerminate := True;
inherited Create(False);
end;procedure THTMLThread.Execute;
var
// sValue: String;
sStream: TStringStream;
IdHTTP: TIdHTTP;
begin
sStream := TStringStream.Create('');
ReturnValue := 10000;
IdHTTP := TIdHTTP.Create(nil);
IdHTTP.HandleRedirects := True;
IdHTTP.ReadTimeout := 15000;
try
IdHTTP.Get(FURL,sStream);
FsHTMLCode^ := sStream.DataString;
FiState^ := True;
except
FiState^ := False;
end;
IdHTTP.Free;
sStream.Free;
inherited;
end;end.
以下是主线程调用的部分
//AURL:地址
//FsBody: 用于接收返回的HTML字符串
//FbGetHttpState:标记是否成功
//GetHTMLCode:自定义的过程,线程接收后会执行,在哪里可以加入处理数据库的代码
begin
try
FbGetHttpState := False;
sHTML := THTML.Create(AURL,FsBody,FbGetHttpState);
sHTML.OnTerminate := GetHTMLCode;
except
WriteLog('[CreateThread]异常[' + AURL + ']',1);
try
GetCorpInformation;
except
end;
end;
end;
try
GetCorpInformation;
except
end;
以上这部分可以不要
http://community.csdn.net/Expert/topic/4533/4533716.xml?temp=.4751551
来自:小雨哥, 时间:2003-2-22 4:49:00, ID:1637595
获取网页源代码的最简单办法,就是利用 WinInet 单元中的函数:
uses WinInet;
function GetWebPage(const Url: string):string;
var
Session,
HttpFile:HINTERNET;
szSizeBuffer:Pointer;
dwLengthSizeBuffer:DWord;
dwReserved:DWord;
dwFileSize:DWord;
dwBytesRead:DWord;
Contents:PChar;
begin
Session:=InternetOpen('',0,niL,niL,0);
HttpFile:=InternetOpenUrl(Session,PChar(Url),niL,0,0,0);
dwLengthSizeBuffer:=1024;
HttpQueryInfo(HttpFile,5,szSizeBuffer,dwLengthSizeBuffer,dwReserved);
GetMem(Contents,dwFileSize);
InternetReadFile(HttpFile,Contents,dwFileSize,dwBytesRead);
InternetCloseHandle(HttpFile);
InternetCloseHandle(Session);
Result:=StrPas(Contents);
FreeMem(Contents);
end;
使用时,直接把收到的源代码显示出来:
Memo1.Text := GetWebPage('http://www.delphibbs.com/delphibbs/listq.asp');