您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> Delphi >> 获取网页源码的问题

获取网页源码的问题

来源:网络整理     时间:2016/8/29 12:32:36     关键词:

关于网友提出的“ 获取网页源码的问题”问题疑问,本网通过在网上对“ 获取网页源码的问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 获取网页源码的问题
描述:

本帖最后由 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:

引用 7 楼 none01 的回复:
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   //
            // 这行放到HttpQueryINfo后去 GetMem(szSizeBuffer, dwLengthSizeBuffer); //给szsizebuffer动态申请1024内存空间
            GetMem(Contents, dwFileSize);
            HttpQueryInfo(HttpFile, 5, szSizeBuffer, dwLengthSizeBuffer, dwReserved);
            GetMem(szSizeBuffer, dwLengthSizeBuffer); //给szsizebuffer动态申请1024内存空间
            GetMem(Contents, dwFileSize);
            InternetReadFile(HttpFile, Contents, dwFileSize, dwBytesRead);
            InternetCloseHandle(HttpFile);
            InternetCloseHandle(Session);
            Result := StrPas(Contents);
      finally//
            FreeMem(szSizeBuffer); //释放,object高手突破说的话:借债还钱,天经地义
            FreeMem(Contents);
      end;//
end;

另外,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

相关图片

相关文章