Ошибка WinHttpSendRequest с кодом ошибки 87 - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь загрузить файл с сервера с помощью 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 в параметре.

Как я могу отправить запрос на сервер?

1 Ответ

1 голос
/ 02 апреля 2019

ERROR_INVALID_PARAMETER означает, что проблема связана с обработчиком hRequest, который вы еще не проверили, возвращаемое значение.Если это NULL, то, возможно, причина была в последнем вызове WinHttpOpenRequest;или даже WinHttpConnect не удалось, так что он больше не получил hRequest.

Как сказал @ Реми Лебо, это зависит от настроек Юникода.При отключенном Юникоде, если тип tsDownloadServer и tsDownloadFileURLPath равен wstring, тогда (LPTSTR)tsDownloadServer.c_str() будет преобразован из широкого символа в несколько байтов.Тогда нулем в широком символе (если символ находится в ASCII) считается терминатор: enter image description here

И строка усекается: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...