WinHttpSendRequest失败,错误代码为87

问题描述 投票:0回答:1

我正在尝试使用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。

如何向服务器发送请求?

windows c++11 winapi
1个回答
1
投票

ERROR_INVALID_PARAMETER意味着问题出在处理程序hRequest上,你尚未检查返回值。如果它是NULL,那可能是因为最后一次调用WinHttpOpenRequest;甚至WinHttpConnect失败了,所以它不再得到hRequest

正如@Remy Lebeau所说,这取决于你的Unicode设置。禁用Unicode后,如果tsDownloadServertsDownloadFileURLPath的类型为wstring,则(LPTSTR)tsDownloadServer.c_str()将从宽字符转换为多个字节。然后宽字符中的零(如果字符是ASCII)被认为是终止符:enter image description here

字符串被截断:enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.