我的C++不是很好,如果你在代码片段中看到一些更好的东西,请告诉我!
我正在以异步方式实现winhttp。但我在检索响应时遇到了问题。我想不出来。因为您应该能够一次解析整个响应。由于可能会出现多个并发请求,因此不能在全局变量中缓冲响应(headers+body)。
如何检索http get请求的响应?或者,在新线程上执行winhttp synchronous是不是一种好的做法(这样主循环就不会被阻塞,然后在阻塞后调用函数?):
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....发布于 2012-03-17 02:30:45
在MSDN - Asynchronous Completion in WinHTTP上查看此示例代码。
在QueryData中调用WinHttpQueryDataAvailable将生成一个状态回调,其中dwInternetStatus参数中包含
WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE完成。通过检查lpvStatusInformation参数指向的值,回调可以确定还有多少数据要读取,如果没有剩余数据,则可以继续显示已读取的所有数据。
这表明您的回调是使用缓冲区指针和数据长度调用的。
https://stackoverflow.com/questions/9366402
复制相似问题