【发布时间】:2019-10-30 06:28:24
【问题描述】:
当尝试使用 HttpSendRequest 向网站发送 get 请求时,请注意已在多个网站(google、stackoverflow、youtube 等)上尝试过此操作,出现错误,错误 12152 (The server returned an invalid or unrecognized response)。
当使用 Fiddler 得到更正常的响应时,这是错误[Fiddler] ReadResponse() failed: The server did not return a complete response for this request. Server returned 0 bytes.
奇怪的是,即使使用了所有相同的参数,InternetOpenUrl 也不会失败。这是我的代码:
HINTERNET hInternet = InternetOpenW(..., DIRECT, NULL, NULL, 0);
HINTERNET hHttp = InternetConnectW(hInternet, L"stackoverflow.com", 443, NULL, NULL, INTERNET_SERVICE_HTTP, INTERNET_FLAG_SECURE, 0);
static const WCHAR anyAccept[] = { '*','/','*', 0 };
LPCWSTR accept[2] = { anyAccept, NULL };
HINTERNET hRequest = HttpOpenRequestW(hHttp, L"GET", L"/", NULL, NULL, accept, 0, 0);
HttpSendRequestW(hRequest, NULL, 0, NULL, 0);
//InternetOpenUrlW(hInternet, L"https://stackoverflow.com/", NULL, 0, 0, 0);
据我所知,查看ReactOS、InternetConnectW 上发布的源,使用http 服务,使用HTTP_Connect,就像InternetOpenUrl,唯一的区别是在OpenUrl 中它设置了@ 987654333@ 参数为INET_OPENURL 而在 Connect 中将其设置为 0 但之后,一切都是完全相同的罪过 OpenUrl 也使用HttpOpenRequestW 和HttpSendRequestW,所以有什么问题,为什么Connect => OpenRequest(GET) => SendRequest 会导致错误代码 12152 但执行 OpenUrl,这是同一件事,成功完成?
【问题讨论】:
-
实际响应是什么样的?
-
@RemyLebeau 使用 SendRequest 时我没有得到响应,除非 Fiddler 打开,我得到的只是
false作为返回值,GetLastError()是 12152。另外,HttpQueryInfo没有'在调用HttpSendRequest后无法工作,错误是请求未处于正确状态。