小编bri*_*anb的帖子

InternetOpenUrl仅在下载整个HTTP响应后返回

我正在使用WinINET编写一个下载文件实用程序,并注意到(特别是在大型下载时),WinINET InternetOpenUrl()调用仅在下载完整个HTTP响应后才返回.

我通过使用Charles代理工具以及使用WireShark来确认这一点,并注意到下载完全完成,然后WinINET通知我的代码.

一些简化(同步)​​代码:

hInt = InternetOpen(USER_AGENT_NAME, INTERNET_OPEN_TYPE_PRECONFIG, 
                    NULL, NULL, 0);
DWORD dwRequestFlags = INTERNET_FLAG_NO_UI   // no UI please
            |INTERNET_FLAG_NO_AUTH           // don't authenticate
            |INTERNET_FLAG_PRAGMA_NOCACHE    // do not try the cache or proxy
            |INTERNET_FLAG_NO_CACHE_WRITE;   // don't add this to the IE cache

hUrl = InternetOpenUrl(hInt, szURL, NULL, 0, dwRequestFlags, NULL);
if (hUrl)
{
  // <only gets here after entire download is complete>

  InternetCloseHandle(hUrl);
}
InternetCloseHandle(hInt);
Run Code Online (Sandbox Code Playgroud)

文档建议这发送请求,并处理响应的标头(未完成下载),然后您应该运行InternetReadFile()循环直到它返回TRUE并且dwNumberOfBytesRead为0.

来自MSDN
InternetOpenUrl功能: InternetOpenUrl函数解析URL字符串,建立与服务器的连接,并准备下载URL标识的数据.然后,应用程序可以使用InternetReadFile …

c++ winapi http wininet

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

c++ ×1

http ×1

winapi ×1

wininet ×1