HttpSendRequest 失败并出现错误 12152,但 InternetOpenUrl 没有

Posted

技术标签:

【中文标题】HttpSendRequest 失败并出现错误 12152,但 InternetOpenUrl 没有【英文标题】:HttpSendRequest fails with error 12152, but InternetOpenUrl doesn't 【发布时间】:2019-10-30 06:28:24 【问题描述】:

当尝试使用 HttpSendRequest 向网站发送 get 请求时,请注意已在多个网站(google***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"***.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://***.com/", NULL, 0, 0, 0);

据我所知,查看ReactOS、InternetConnectW 上发布的源,使用http 服务,使用HTTP_Connect,就像InternetOpenUrl,唯一的区别是在OpenUrl 中它设置了@ 987654333@ 参数为INET_OPENURL 而在 Connect 中将其设置为 0 但之后,一切都是完全相同的罪过 OpenUrl 也使用HttpOpenRequestWHttpSendRequestW,所以有什么问题,为什么Connect => OpenRequest(GET) => SendRequest 会导致错误代码 12152 但执行 OpenUrl,这是同一件事,成功完成?

【问题讨论】:

实际响应是什么样的? @RemyLebeau 使用 SendRequest 时我没有得到响应,除非 Fiddler 打开,我得到的只是 false 作为返回值,GetLastError() 是 12152。另外,HttpQueryInfo 没有'在调用 HttpSendRequest 后无法工作,错误是请求未处于正确状态。 【参考方案1】:

您正试图在 443 端口上建立一个安全部分,但您在 HttpOpenRequest 调用中缺少 INTERNET_FLAG_SECURE 标志。

MSDN documentation

变化:

HttpOpenRequestW(hHttp, L"GET", L"/", NULL, NULL, accept, 0, 0);

到:

HttpOpenRequestW(hHttp, L"GET", L"/", NULL, NULL, accept, INTERNET_FLAG_SECURE, 0);

【讨论】:

你是对的,伙计,我很笨,即使在提供的 ReactOS 链接中,它也有 if (urlComponents.nScheme == INTERNET_SCHEME_HTTPS) dwFlags |= INTERNET_FLAG_SECURE; 行,dwFlags 用于 Http_ConnectHttpOpenRequest,谢谢寻求帮助,不敢相信我忽略了它xD

以上是关于HttpSendRequest 失败并出现错误 12152,但 InternetOpenUrl 没有的主要内容,如果未能解决你的问题,请参考以下文章

为啥 VTS 失败并出现不准确的 adb 错误?

LAMPP 启动失败并出现错误 2

WinINet:如何防止 HttpSendRequest 跟随重定向(30x 状态代码)?

pip install tesserocr 失败并出现错误“tesserocr 构建***失败”

H2 - (相当)长插入失败并出现错误 42000

颤动的firebase错误“失败:构建失败并出现异常”