VC ++代码中的ERROR_INVALID_PARAMETER和ERROR_CONNECTION_INVALID

时间:2018-06-27 22:28:54

标签: c++ winapi parameters

我编写了一个例程,该例程使用Httpapi.dll中的HttpDeclarePush()函数来利用服务器推送。

我正在按如下方式传递参数,但是在调用ERROR_INVALID_PARAMETER时出现错误87(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);

我能够克服先前的错误,但是现在我在ERROR_CONNECTION_INVALID遇到错误1229(HttpDeclarePush(p_req_queue_handle, request_id, verb, http_path, query, headers);

我已经检查了要推送的JS文件。在https://localhost/polyfills.0d74a55d0dbab6b8c32c.js中非常有用。

对这个错误有帮助吗?我是否需要在HTTP_REQUEST_HEADERS* headers中提供一些HEADERS?我尝试了类似pHttpContext->GetRequest()->GetHeader;的方法,但是我认为这不是正确的方法。

对不起,我是VC ++的新手。

1 个答案:

答案 0 :(得分:0)

标题必须按如下所示正确创建和传递:

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_IDhttps://docs.microsoft.com/en-us/windows/desktop/api/http/ne-http-_http_header_id)参数HttpHeaderConnection中的一个取'Close'而引起的问题,因此每次请求响应。 因此,最重要的是,我们必须适当设置参数以解决ERROR_INVALID_PARAMETER。