我在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....
答案 0 :(得分:4)
在MSDN上查看此示例代码 - Asynchronous Completion in WinHTTP。
QueryData中对WinHttpQueryDataAvailable的调用会生成一个状态 完成
WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE
完成的回调 dwInternetStatus参数。通过检查指向的值 在lpvStatusInformation参数中,回调可以确定如何 可以读取大量数据,如果没有剩余数据,则可以 继续显示已读取的所有数据。
这表明使用缓冲区指针和数据长度调用回调函数。