关于网友提出的“ 获取网页源码的问题”问题疑问,本网通过在网上对“ 获取网页源码的问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 获取网页源码的问题
描述:本帖最后由 fbiboss 于 2013-06-29 12:03:10 编辑
以下的代码为什么加上带有注释的两句就会有时候出问题,并且不能用TRY EXCEPT END
否则有时候查询网页会返回空
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;
try //
GetMem(szSizeBuffer, dwLengthSizeBuffer); //给szsizebuffer动态申请1024内存空间
GetMem(Contents, dwFileSize);
HttpQueryInfo(HttpFile, 5, szSizeBuffer, dwLengthSizeBuffer, dwReserved);
GetMem(Contents, dwFileSize);
InternetReadFile(HttpFile, Contents, dwFileSize, dwBytesRead);
InternetCloseHandle(HttpFile);
InternetCloseHandle(Session);
Result := StrPas(Contents);
finally//
FreeMem(szSizeBuffer); //释放,object高手突破说的话:借债还钱,天经地义
FreeMem(Contents);
end;//
end;
解决方案1:
另外,19行多余的。
解决方案2: 你这里dwFileSize没有赋值啊,是系统中随机的一个值,当然可能有时出问题罗
解决方案3:
解决方案4: begin
Session := InternetOpen('', 0, nil, nil, 0);
HttpFile := InternetOpenUrl(Session, PChar(Url), nil, 0, 0, 0);
dwLengthSizeBuffer := 1024;
GetMem(szSizeBuffer, dwLengthSizeBuffer); //给szsizebuffer动态申请1024内存空间
GetMem(Contents, dwFileSize);
try //
HttpQueryInfo(HttpFile, 5, szSizeBuffer, dwLengthSizeBuffer, dwReserved);
InternetReadFile(HttpFile, Contents, dwFileSize, dwBytesRead);
InternetCloseHandle(HttpFile);
InternetCloseHandle(Session);
Result := StrPas(Contents);
finally//
FreeMem(szSizeBuffer); //释放,object高手突破说的话:借债还钱,天经地义
FreeMem(Contents);
end;//
end;
解决方案5: 你不如用IdHttp控件:
uses IdHTTP;
function GetWebPage(URL: string):string;
var
http: TIDHttp;
begin
try
http:=TIdHttp.Create(nil);
result := http.Get(URL);
finally
Http.Free;
end;
end;
以上介绍了“ 获取网页源码的问题”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3660038.html