【发布时间】:2019-04-01 16:41:11
【问题描述】:
我正在尝试使用 WinHttpSendRequest 从服务器下载文件,但结果为 0,错误代码为 87 (ERROR_INVALID_PARAMETER)。
// Specify an HTTP server.
if (hSession)
hConnect = WinHttpConnect( hSession, T2W((LPTSTR)tsDownloadServer.c_str()), wPort, 0 );
// tsDownloadServer = "xxx.xxx.xxx.xx:xxxx"
// Create an HTTP request handle.
if (hConnect)
hRequest = WinHttpOpenRequest( hConnect, L"GET",T2W((LPTSTR)tsDownloadFileURLPath.c_str()), NULL, WINHTTP_NO_REFERER, ppwszAcceptTypes, dwOpenRequestFlag );
// tsDownloadFileURLPath = "/xxxxx/xxxxxxxx/58bbf9067ad35634c7caa5594e8ec712/windows_installer/xxxxx_xxxxxx.wak"
bResults = WinHttpSendRequest( hRequest, WINHTTP_NO_ADDITIONAL_HEADERS, 0, WINHTTP_NO_REQUEST_DATA, 0, 0, 0 );
bResults 为 0,GetLastError() 返回 87
我在互联网上研究过相关问题是由于超过 24 字节的数据,但在我的情况下,我在参数中设置了 WINHTTP_NO_REQUEST_DATA。
如何向服务器发送请求?
【问题讨论】:
-
忘记 WinHTTP 并使用 WinInet。
-
您是否看到来自 WinHttpOpenRequest 的 bResults 不为 NULL?这可能是您得到 ERROR_INVALID_PARAMETER (87) 结果的原因。
-
代码显然是在启用 Unicode 的情况下编译的,所以我的魔法水晶调试器认为
tsDownloadServer和tsDownloadFileURLPath是 ANSI 字符串被错误地转换为无效的 Unicode 字符指针。如果您必须进行类型转换只是为了使代码编译,那么您可能做错了什么。