[英]Purpose of WINHTTP_QUERY_URI in WinHTTP?
可以使用帶有WinHttpQueryHeaders函數的WINHTTP_QUERY_URI
標志確切地查詢哪些HTTP標頭? 在閱讀了它的描述之后,我印象很深,這個標志應該被用來獲取WinHttpOpenRequest函數中指定的請求的URI。 但是下面的程序給我一個錯誤代碼12019 ERROR_INTERNET_INCORRECT_HANDLE_STATE
(如果我取消注釋兩條注釋行, ERROR_HTTP_HEADER_NOT_FOUND
12150 ERROR_HTTP_HEADER_NOT_FOUND
)。
#include <cstdio>
#include <windows.h>
#include <winhttp.h>
#pragma comment(lib, "winhttp.lib")
int main()
{
HINTERNET hSession = WinHttpOpen(nullptr, WINHTTP_ACCESS_TYPE_NO_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0);
HINTERNET hConnect = WinHttpConnect(hSession, L"www.ietf.org", INTERNET_DEFAULT_HTTP_PORT, 0);
HINTERNET hRequest = WinHttpOpenRequest(hConnect, L"GET", L"/rfc/rfc2616.txt", nullptr, WINHTTP_NO_REFERER, nullptr, 0);
//WinHttpSendRequest(hRequest, WINHTTP_NO_ADDITIONAL_HEADERS, 0, WINHTTP_NO_REQUEST_DATA, 0, 0, 0);
//WinHttpReceiveResponse(hRequest, 0);
wchar_t url[1024] = {};
DWORD url_size = sizeof(url);
auto success = WinHttpQueryHeaders(hRequest, WINHTTP_QUERY_URI, WINHTTP_HEADER_NAME_BY_INDEX, url, &url_size, WINHTTP_NO_HEADER_INDEX);
auto error_code = GetLastError();
wprintf(L"success=%d error_code=%u url=%s", success, error_code, url);
WinHttpCloseHandle(hRequest);
WinHttpCloseHandle(hConnect);
WinHttpCloseHandle(hSession);
}
PS是的,我知道我可以使用WinHttpQueryOption
和WINHTTP_OPTION_URL
獲取請求URI,無需指出。
編輯。 添加WINHTTP_QUERY_FLAG_REQUEST_HEADERS
標志按Obvlious船長回答以下(這完全有道理的,如果 WINHTTP_QUERY_URI
確實應該返回請求的URI)沒有太大的差別:現在有或無WinHttpSendRequest
和WinHttpReceiveResponse
調用WinHttpQueryHeaders
功能產生錯誤代碼12150 ERROR_HTTP_HEADER_NOT_FOUND
。
您正在查詢不包含URI的請求的響應標頭。 您需要包括WINHTTP_QUERY_FLAG_REQUEST_HEADERS
修飾符標志才能從請求標頭中檢索。
WinHttpQueryHeaders(
hRequest,
WINHTTP_QUERY_URI | WINHTTP_QUERY_FLAG_REQUEST_HEADERS,
WINHTTP_HEADER_NAME_BY_INDEX,
url,
&url_size,
WINHTTP_NO_HEADER_INDEX);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.