ERROR_INVALID_PARAMETER & ERROR_CONNECTION_INVALID в коде VC ++ - PullRequest
0 голосов
/ 28 июня 2018

Я написал процедуру, которая использует функцию HttpDeclarePush() из Httpapi.dll для использования запросов сервера.

Я передаю параметры, как показано ниже, но я получаю ошибку 87 (ERROR_INVALID_PARAMETER) при вызове HttpDeclarePush():

const HTTPAPI_VERSION version = HTTPAPI_VERSION_2;
const auto request_queue_handle = reinterpret_cast<void*>(HttpCreateRequestQueue(version, nullptr, nullptr, 0, &p_req_queue_handle));

const auto verb = HttpVerbGET;
const auto http_path = reinterpret_cast<const wchar_t*>("D:\Some_Path_From_Where_Resource_File_Will_Be_Pushed_To_Client\polyfills.0d74a55d0dbab6b8c32c.js");
const auto query = "polyfills.0d74a55d0dbab6b8c32c.js";

HTTP_REQUEST_HEADERS* headers = nullptr;  //pHttpContext->GetRequest()->GetHeader; //lpOutBuffer;
const auto is_success = HttpDeclarePush(p_req_queue_handle, request_id, verb, http_path, query, headers);

Я не понимаю, какой параметр является потенциально неправильным. Кто-нибудь может мне помочь?

РЕДАКТИРОВАТЬ: Вот модифицированный код, как вы упомянули:

const auto request_queue_handle = HttpCreateRequestQueue(version, nullptr, nullptr, 0, &p_req_queue_handle);
const auto verb = HttpVerbGET;
const auto http_path = L"/polyfills.0d74a55d0dbab6b8c32c.js";
const auto query = nullptr;

HTTP_REQUEST_HEADERS* headers = nullptr;  //pHttpContext->GetRequest()->GetHeader; //lpOutBuffer;

const auto is_success = HttpDeclarePush(p_req_queue_handle, request_id, verb, http_path, query, headers);

Мне удалось преодолеть предыдущую ошибку, но теперь я получаю ошибку 1229 (ERROR_CONNECTION_INVALID) в HttpDeclarePush(p_req_queue_handle, request_id, verb, http_path, query, headers);

Я проверил файл JS, который нужно нажать. Это очень доступно в https://localhost/polyfills.0d74a55d0dbab6b8c32c.js.

Любая помощь по этой ошибке? Это то, что мне нужно предоставить несколько заголовков в HTTP_REQUEST_HEADERS* headers? Я пробовал что-то вроде pHttpContext->GetRequest()->GetHeader;, но я не думаю, что это правильный способ сделать это.

Простите, я новичок в VC ++.

1 Ответ

0 голосов
/ 12 июля 2018

Заголовок должен быть создан и передан правильно, как показано ниже:

HTTP_REQUEST_ID    request_id;
const HTTPAPI_VERSION version = HTTPAPI_VERSION_2;
auto pHttpRequest = p_http_context->GetRequest();
auto phttpRequestRaw = pHttpRequest->GetRawHttpRequest();
request_id = phttpRequestRaw->RequestId;
auto headers = phttpRequestRaw->Headers;

const auto is_success = HttpDeclarePush(p_req_queue_handle, request_id, verb, http_path, query, &headers);

ERROR_CONNECTION_INVALID - это проблема, вызванная одним из _ HTTP_HEADER_ID (https://docs.microsoft.com/en-us/windows/desktop/api/http/ne-http-_http_header_id) параметр HttpHeaderConnection, принимающим 'Close', следовательно, соединение закрывается после каждого ответа на запрос. Следовательно, суть в том, что мы должны сделать параметры правильными для разрешения ERROR_INVALID_PARAMETER.

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