WinHttpQueryHeaders과 함께 WINHTTP_QUERY_URI
플래그를 사용하여 정확하게 조회 할 수있는 HTTP 헤더는 무엇입니까? 설명을 읽은 후이 플래그가 WinHttpOpenRequest에 지정된 요청의 URI를 가져 오는 데 사용되었다고 생각되었습니다. 그러나 다음 프로그램은 오류 코드 12019 ERROR_INTERNET_INCORRECT_HANDLE_STATE
을 제공합니다 (주석 처리 된 두 줄을 주석 처리하지 않은 경우 12150 ERROR_HTTP_HEADER_NOT_FOUND
).WinHTTP에서 WINHTTP_QUERY_URI의 목적은 무엇입니까?
#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);
}
P. 네, WinHttpQueryOption
과 WINHTTP_OPTION_URL
을 사용하여 요청 URI를 얻을 수 있다는 것을 알고 있습니다. 지적 할 필요는 없습니다.
EDIT. (WINHTTP_QUERY_URI
이 참으로 요청 URI를 반환하기로 한 경우 완전히 이해 한다) 아래 선장 Obvlious 응답에 따라 WINHTTP_QUERY_FLAG_REQUEST_HEADERS
플래그를 추가하면 많은 차이를하지 않았다 : 지금 또는 WinHttpQueryHeaders
기능은 생산 WinHttpSendRequest
및 WinHttpReceiveResponse
호출 오류 코드 12150 ERROR_HTTP_HEADER_NOT_FOUND
없이.
좋은 캐치, 아직 문제가 해결되지 않는이 플래그를 추가 - 지금은 대신 오류 코드 내가, 내 게시물을 업데이 트됩니다 여전히 오류 코드 12150.를 얻고 12019의 것은 ('WINHTTP_QUERY_FLAG_REQUEST_HEADERS' 플래그를 포함 할 수있는 I 완전히 잊어 버렸습니다.) – PowerGamer
AFAIK'WinHttpSendRequest'와'WinHttpReceiveResponse'는 여전히 호출되어야합니다. –
그들과 함께 여전히 오류 코드 12150 – PowerGamer