2013-04-16 3 views
2

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. 네, WinHttpQueryOptionWINHTTP_OPTION_URL을 사용하여 요청 URI를 얻을 수 있다는 것을 알고 있습니다. 지적 할 필요는 없습니다.

EDIT. (WINHTTP_QUERY_URI이 참으로 요청 URI를 반환하기로 한 경우 완전히 이해 한다) 아래 선장 Obvlious 응답에 따라 WINHTTP_QUERY_FLAG_REQUEST_HEADERS 플래그를 추가하면 많은 차이를하지 않았다 : 지금 또는 WinHttpQueryHeaders 기능은 생산 WinHttpSendRequestWinHttpReceiveResponse 호출 오류 코드 12150 ERROR_HTTP_HEADER_NOT_FOUND없이.

답변

1

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); 
+0

좋은 캐치, 아직 문제가 해결되지 않는이 플래그를 추가 - 지금은 대신 오류 코드 내가, 내 게시물을 업데이 트됩니다 여전히 오류 코드 12150.를 얻고 12019의 것은 ('WINHTTP_QUERY_FLAG_REQUEST_HEADERS' 플래그를 포함 할 수있는 I 완전히 잊어 버렸습니다.) – PowerGamer

+0

AFAIK'WinHttpSendRequest'와'WinHttpReceiveResponse'는 여전히 호출되어야합니다. –

+0

그들과 함께 여전히 오류 코드 12150 – PowerGamer

관련 문제