0

我的 C++ 不是很好,如果您在代码片段中看到可以更好的东西,请不吝赐教!

我正在以异步方式实现 winhttp。但我无法检索响应。我想不通。因为您应该能够一次解析整个响应。由于可能会发生多个并发请求,因此在全局变量中缓冲响应(标头+正文)不是要走的路。

如何检索 http get 请求的响应?或者,在新线程上执行 winhttp 同步是一个好习惯(所以主循环不会被阻塞,然后在完成后调用函数?):

     void __stdcall cb(HINTERNET h, DWORD_PTR d, DWORD dwInternetStatus, LPVOID lpvStatusInformation, DWORD dwStatusInformationLength){ 
         char* s=new char[1];

             DWORD dwSize = 0;
             if (dwInternetStatus==WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE){
                                 MessageBoxA(0,s,"",0);

                WinHttpQueryDataAvailable( h, &dwSize);
                .....

             }

 }

主要是调用:

...winhttpopen...
WinHttpSetStatusCallback(request, (WINHTTP_STATUS_CALLBACK)whCallback,WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS,0);
...winhttpsend....
4

1 回答 1

4

在 MSDN - WinHTTP 中的异步完成上查看此示例代码。

QueryData 中对 WinHttpQueryDataAvailable 的调用会生成一个状态回调,并WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE在 dwInternetStatus 参数中完成。通过检查 lpvStatusInformation 参数指向的值,回调可以确定还有多少数据需要读取,如果没有剩余数据,则可以继续显示所有已读取的数据。

这表明您的回调是使用缓冲区指针和其中的数据长度调用的。

于 2012-03-16T18:30:44.763 回答