【发布时间】:2011-12-30 14:40:26
【问题描述】:
使用 Wininet 进行异步请求,当使用 INTERNET_STATUS_REQUEST_COMPLETE 调用状态回调函数时,我得到 http 状态码。
result = HttpQueryInfo(
this->requestHandle,
HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER,
&value,
&sizeofDword,
&index);
返回的状态码是 200。之后,我调用 InternetReadFile()。
result = InternetReadFile(
this->requestHandle,
((char*)(this->buffer)) + this->totalBytesReceived,
this->bufferSize - this->totalBytesReceived,
&bytesRead);
this->totalBytesReceived += bytesRead;
它返回 true 并将 lpNumberOfBytesRead 设置为零。 GetLastError() 返回 ERROR_IO_PENDING,然后我等待使用 INTERNET_STATUS_REQUEST_COMPLETE 再次调用回调函数。
发生这种情况时,InternetReadFile() 返回 true 并再次将 lpNumberOfBytesRead 设置为零。
如果我调试应用程序,我可以在第一个 InternetReadFile() 之后看到响应数据已经在 lpBuffer 上。此外,如果我在 InternetReadFile() 之前调用 Sleep() 一秒钟,InternetReadFile() 可以正常工作。
Sleep(1000);
result = InternetReadFile( ...
我是否缺少任何步骤?
【问题讨论】:
-
所以你的代码中有一个 InternetSetStatusCallback() 吗?而行为不端的实际 InternetReadFile() 调用不是您发布的那个?难以诊断隐形代码。
-
@HansPasant 是的,显示错误行为的 InternetReadFile() 是已发布的。你认为我应该发布代码的任何其他部分吗?