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 也使用HttpOpenRequestW
和HttpSendRequestW
,所以有什么问题,为什么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_Connect
和 HttpOpenRequest
,谢谢寻求帮助,不敢相信我忽略了它xD以上是关于HttpSendRequest 失败并出现错误 12152,但 InternetOpenUrl 没有的主要内容,如果未能解决你的问题,请参考以下文章
WinINet:如何防止 HttpSendRequest 跟随重定向(30x 状态代码)?