Назначение WINHTTP_QUERY_URI в WinHTTP?

Какой именно HTTP-заголовок можно запросить, используя WINHTTP_QUERY_URI флаг с WinHttpQueryHeaders функционировать? После прочтения его описания у меня сложилось впечатление, что этот флаг должен был быть использован для получения URI запроса, указанного в WinHttpOpenRequest функция. Тем не менее следующая программа дает мне код ошибки 12019 ERROR_INTERNET_INCORRECT_HANDLE_STATE (и 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);
}

Постскриптум Да, я знаю, что могу получить URI запроса, используя WinHttpQueryOption а также WINHTTP_OPTION_URLНет необходимости указывать на это.

РЕДАКТИРОВАТЬ. Добавление WINHTTP_QUERY_FLAG_REQUEST_HEADERS пометить в соответствии с ответом капитана Obvlious ниже (что полностью имеет смысл если WINHTTP_QUERY_URI действительно должен был вернуть запрос URI) не имеет большого значения: сейчас с или без WinHttpSendRequest а также WinHttpReceiveResponse звонки WinHttpQueryHeaders Функция выдает код ошибки 12150 ERROR_HTTP_HEADER_NOT_FOUND,

2

Решение

Вы запрашиваете заголовки ответа на запрос, которые не содержат 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);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]