HttpSendRequest завершается с ошибкой 12152, но InternetOpenUrl не - PullRequest
1 голос
/ 30 октября 2019

При попытке отправить запрос на получение, используя HttpSendRequest, на веб-сайт, обратите внимание, что он был опробован на нескольких сайтах (google, stackoverflow, 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"stackoverflow.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://stackoverflow.com/", NULL, 0, 0, 0);

Насколько я могу судить, глядя на источник, размещенный на ReactOS , InternetConnectW, используя службу http, использует HTTP_Connect, простоподобно InternetOpenUrl, единственное отличие состоит в том, что в OpenUrl он устанавливает для параметра dwInternalFlags значение INET_OPENURL, в то время как в Connect он устанавливает его в 0, но после этого все те же грехи, которые OpenUrl также использует HttpOpenRequestW & HttpSendRequestWТак в чем же проблема, почему Connect => OpenRequest(GET) => SendRequest приводит к коду ошибки 12152, но выполнение OpenUrl (то же самое под капотом) завершается успешно?

1 Ответ

1 голос
/ 30 октября 2019

Вы пытаетесь установить защищенный раздел через порт 443, но при вызове HttpOpenRequest отсутствует флаг INTERNET_FLAG_SECURE.

Документация MSDN

Изменить:

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

на:

HttpOpenRequestW(hHttp, L"GET", L"/", NULL, NULL, accept, INTERNET_FLAG_SECURE, 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...