WinHTTP异步回调

时间:2012-02-20 18:26:33

标签: c++ winapi winhttp

我在C ++方面不是很擅长,如果你在代码片段中看到更好的东西,请教育我!

我正在以异步方式实现winhttp。但我无法检索响应。我弄清楚了。因为您应该能够立即解析整个响应。由于可能发生多个concurent请求,因此无法在全局变量中缓冲响应(标题+正文)。

如何检索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....

1 个答案:

答案 0 :(得分:4)

在MSDN上查看此示例代码 - Asynchronous Completion in WinHTTP

  

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

这表明使用缓冲区指针和数据长度调用回调函数。