我编写了一个例程,该例程使用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 ++的新手。
答案 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_ID
(https://docs.microsoft.com/en-us/windows/desktop/api/http/ne-http-_http_header_id)参数HttpHeaderConnection
中的一个取'Close'
而引起的问题,因此每次请求响应。
因此,最重要的是,我们必须适当设置参数以解决ERROR_INVALID_PARAMETER。