<WinInet.h> API 中的 InternetOpenUrl 和 InternetReadFile 帮助

Posted

技术标签:

【中文标题】<WinInet.h> API 中的 InternetOpenUrl 和 InternetReadFile 帮助【英文标题】:Help with InternetOpenUrl and InternetReadFile in <WinInet.h> API 【发布时间】:2010-08-04 15:31:51 【问题描述】:

我正在尝试使用 WinInet API 简单地访问页面。一旦我访问它,我希望能够将内容读入字符串。我已经初始化了根节点。到目前为止,这是我得到的:

HINTERNET hChildURL = InternetOpenUrl(hInternetRoot,
                                      LPCTSTR(CString("http://www.google.com/")),
                                      NULL,
                                      0,
                                      0,
                                      0);

在此之后,我知道您必须使用 InternetReadFile 来实际提取数据。有人可以提供一个详细的例子来说明如何做到这一点。我对 C 风格的文件函数和缓冲区的使用不是特别熟悉,所以请放轻松。

另一方面,我应该使用不同的或更现代的 Windows API 来代替吗?从长远来看,我被分配开发一个应用程序,该应用程序将充当客户端并使用 HTTP 和 HTTPS 与远程服务器一起发送/接收数据。我走在正确的道路上吗?

编辑:更具体的要求:它必须用 C++ 编写,必须与 Win XP 及更高版本兼容,并且必须仅使用标准 Windows 库。除此之外,我可以随心所欲。

【问题讨论】:

【参考方案1】:

好吧,你只是一次读一大块:

HINTERNET Request = InternetOpenUrl(...);
if(Request != NULL)

    BYTE Buffer[8192];
    DWORD BytesRead;
    while(InternetReadFile(Request, Buffer, 8192, &BytesRead) && BytesRead != 0)
    
        // do something with Buffer
    
    InternetCloseHandle(Request);
    Request = NULL;

【讨论】:

w00t 谢谢,我不习惯所有这些低级文件阅读杂音。我被 Python 和 Java 宠坏了。

以上是关于<WinInet.h> API 中的 InternetOpenUrl 和 InternetReadFile 帮助的主要内容,如果未能解决你的问题,请参考以下文章

WinInet 只下载网页的一部分

Wininet 给出链接器错误我正在使用 devc++

C++ Wininet 自定义 http 标头

Wininet上传文件TCHAR问题

WinInet 未定义标识符

判断内外网环境