Delphi通过URL获取网页源码


一个直接通过URL获取网页源码的例子,与使用TWebbrowser获取网页源码不同,该方法的优点是不需要加载网页直接获取HTML代码,如果网页中图片和媒体较多,使用TWebbrowser加载网页然后再获取源码速度就太慢了,该方法也有一个缺点,函数调用返回前,程序会无法响应其他消息而导致程序无法更新界面。

uses WinInet, Classes, Windows;

function UrlGetStr(const URL: string; ShowHeaders: boolean = false): string;
const
 Agent = 'Internet Explorer 6.0';
var
 hFile, HInet: HINTERNET;
 Buffer: array[0..32767] of Char;
 BufRead: Cardinal;
 BufSize: Cardinal;
 TempStream: TStringStream;
 dwIndex: dword;
begin
 HInet := InternetOpen(PChar(Agent), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
 if Assigned(HInet) then
 try
 hFile := InternetOpenUrl(HInet, PChar(URL), nil, 0, 0, 0);

 TempStream := TStringStream.Create('');

 dwIndex := 0;
 BufSize := SizeOf(Buffer);

 HttpQueryInfo(hfile, HTTP_QUERY_RAW_HEADERS_CRLF, @Buffer, BufSize, dwIndex);

 if ShowHeaders then TempStream.Write(Buffer, BufSize);

 if Assigned(hFile) then
 try
 with TempStream do
 try
 while InternetReadFile(hFile, @Buffer, BufSize, BufRead) and (BufRead > 0) do
 Write(Buffer, BufRead);
 Result := DataString;
 finally
 Free;
 end;
 finally
 InternetCloseHandle(hFile);
 end;
 finally
 InternetCloseHandle(hinet);
 end;
end;

联系电话:
020-00000000
联系电话:
020-00000000
联系电话:
020-12345678