获取网页源码的问题

fbiboss 2013-06-29 11:53:07
以下的代码为什么加上带有注释的两句就会有时候出问题,并且不能用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;
...全文
364 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fbiboss 2013-07-02
  • 打赏
  • 举报
回复
还是不行,搞不明白了,要是直接抄过来是个正常的代码也不会问了
怪才 2013-07-01
  • 打赏
  • 举报
回复
引用 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行多余的。
怪才 2013-07-01
  • 打赏
  • 举报
回复
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;
huojiehai 2013-06-30
  • 打赏
  • 举报
回复
fbiboss 2013-06-30
  • 打赏
  • 举报
回复
这样也不行,还是会有问题
引用 3 楼 s11ss 的回复:
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;
e我行 2013-06-30
  • 打赏
  • 举报
回复
你这里dwFileSize没有赋值啊,是系统中随机的一个值,当然可能有时出问题罗
s11ss 2013-06-29
  • 打赏
  • 举报
回复
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;
fbiboss 2013-06-29
  • 打赏
  • 举报
回复
我知道IDHTTP啊,我只是想知道为什么会有问题,搞不明白,有时候有问题有时候又正常
hsfzxjy 2013-06-29
  • 打赏
  • 举报
回复
你不如用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;

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧