CHttpFile 클래스
HTTP 서버에서 파일을 요청하고 읽는 기능을 제공합니다.
class CHttpFile : public CInternetFile
속성 | 설명 |
---|---|
CHttpFile::CHttpFile | CHttpFile 개체를 만듭니다. |
이름 | 설명 |
---|---|
CHttpFile::AddRequestHeaders | HTTP 서버로 전송된 요청에 헤더를 추가합니다. |
CHttpFile::EndRequest | SendRequestEx 멤버 함수를 사용하여 HTTP 서버로 전송된 요청을 종료합니다. |
CHttpFile::GetFileURL | 지정된 파일의 URL을 가져옵니다. |
CHttpFile::GetObject | HTTP 서버에 대한 요청에서 동사의 대상 개체를 가져옵니다. |
CHttpFile::GetVerb | HTTP 서버에 대한 요청에 사용된 동사를 가져옵니다. |
CHttpFile::QueryInfo | HTTP 서버에서 응답 또는 요청 헤더를 반환합니다. |
CHttpFile::QueryInfoStatusCode | HTTP 요청과 연결된 상태 코드를 검색하여 제공된 dwStatusCode 매개 변수에 배치합니다. |
CHttpFile::SendRequest | HTTP 서버에 요청을 보냅니다. |
CHttpFile::SendRequestEx | 의 Write 또는 WriteString 메서드CInternetFile 를 사용하여 HTTP 서버에 요청을 보냅니다. |
인터넷 세션이 HTTP 서버에서 데이터를 읽는 경우 인스턴스 CHttpFile
를 만들어야 합니다.
다른 MFC 인터넷 클래스의 작동 방식에 CHttpFile
대한 자세한 내용은 WinInet을 사용한 인터넷 프로그래밍 문서를 참조하세요.
CHttpFile
헤더: afxinet.h
이 멤버 함수를 호출하여 HTTP 요청 핸들에 하나 이상의 HTTP 요청 헤더를 추가합니다.
BOOL AddRequestHeaders(
LPCTSTR pstrHeaders,
DWORD dwFlags = HTTP_ADDREQ_FLAG_ADD_IF_NEW,
int dwHeadersLen = -1);
BOOL AddRequestHeaders(
CString& str,
DWORD dwFlags = HTTP_ADDREQ_FLAG_ADD_IF_NEW);
pstrHeaders
요청에 추가할 헤더 또는 헤더가 포함된 문자열에 대한 포인터입니다. 각 헤더는 CR/LF 쌍으로 종료되어야 합니다.
dwFlags
새 헤더의 의미 체계를 수정합니다. 다음 중 하나일 수 있습니다.
HTTP_ADDREQ_FLAG_COALESCE 플래그를 사용하여 동일한 이름의 헤더를 병합하여 찾은 첫 번째 헤더를 후속 헤더에 추가합니다. 예를 들어 "Accept: text/*" 뒤에 "Accept: audio/*"가 뒤에 오면 단일 머리글 "Accept: text/*, audio/*"가 형성됩니다. 병합되거나 별도의 헤더로 전송된 요청에서 받은 데이터와 관련하여 응집력 있는 체계를 보장하는 것은 호출 애플리케이션에 달려 있습니다.
HTTP_ADDREQ_FLAG_REPLACE 현재 헤더를 바꾸기 위해 제거 및 추가를 수행합니다. 헤더 이름은 현재 헤더를 제거하는 데 사용되며 전체 값은 새 헤더를 추가하는 데 사용됩니다. 헤더 값이 비어 있고 헤더가 발견되면 제거됩니다. 비어 있지 않으면 헤더 값이 대체됩니다.
HTTP_ADDREQ_FLAG_ADD_IF_NEW 헤더가 없는 경우에만 추가합니다. 오류가 있으면 오류가 반환됩니다.
HTTP_ADDREQ_FLAG_ADD REPLACE와 함께 사용됩니다. 헤더가 없으면 추가합니다.
dwHeadersLen
pstrHeaders의 길이(문자)입니다. -1L 이면 pstrHeaders 가 0으로 종료되고 길이가 계산됩니다.
str
추가할 요청 헤더 또는 헤더를 포함하는 CString 개체에 대한 참조입니다.
성공하면 0이 아니고, 그렇지 않으면 0입니다. 호출이 실패하면 Win32 함수 GetLastError 를 호출하여 오류의 원인을 확인할 수 있습니다.
AddRequestHeaders
HTTP 요청 핸들에 자유 형식의 추가 헤더를 추가합니다. HTTP 서버로 전송된 정확한 요청에 대한 자세한 제어가 필요한 정교한 클라이언트에서 사용하기 위한 것입니다.
참고
애플리케이션은 pstrHeaders에서 여러 헤더를 전달하거나 HTTP_ADDREQ_FLAG_ADD 또는 HTTP_ADDREQ_FLAG_ADD_IF_NEW 사용하여 호출을 위해 AddRequestHeaders
str를 전달할 수 있습니다. 애플리케이션이 HTTP_ADDREQ_FLAG_REMOVE 또는 HTTP_ADDREQ_FLAG_REPLACE 사용하여 헤더를 제거하거나 바꾸려고 하면 lpszHeaders에서 하나의 헤더만 제공할 수 있습니다.
이 멤버 함수는 개체를 생성하기 위해 호출됩니다 CHttpFile
.
CHttpFile(
HINTERNET hFile,
HINTERNET hSession,
LPCTSTR pstrObject,
LPCTSTR pstrServer,
LPCTSTR pstrVerb,
DWORD_PTR dwContext);
CHttpFile(
HINTERNET hFile,
LPCTSTR pstrVerb,
LPCTSTR pstrObject,
CHttpConnection* pConnection);
hFile
인터넷 파일에 대한 핸들입니다.
hSession
인터넷 세션에 대한 핸들입니다.
pstrObject
개체를 포함하는 문자열에 대한 포인터입니다 CHttpFile
.
pstrServer
서버 이름을 포함하는 문자열에 대한 포인터입니다.
pstrVerb
요청을 보낼 때 사용할 메서드가 포함된 문자열에 대한 포인터입니다. POST, HEAD 또는 GET일 수 있습니다.
dwContext
개체의 CHttpFile
컨텍스트 식별자입니다. 이 매개 변수에 대한 자세한 내용은 비고를 참조하세요.
pConnection
CHttpConnection 개체에 대한 포인터입니다.
개체를 CHttpFile
직접 생성하지 않고 대신 CInternetSession::OpenURL 또는 CHttpConnection::OpenRequest를 호출합니다.
기본값은 개체를 dwContext
만든 CHttpFile
CInternetSession 개체에서 개체로 MFC CHttpFile
에 의해 전송됩니다. 개체를 호출 CInternetSession::OpenURL
하거나 CHttpConnection
생성 CHttpFile
할 때 기본값을 재정의하여 컨텍스트 식별자를 선택한 값으로 설정할 수 있습니다. 컨텍스트 식별자는 CInternetSession::OnStatusCallback으로 반환되어 식별된 개체의 상태를 제공합니다. 컨텍스트 식별자에 대한 자세한 내용은 Internet First Steps: WinInet 문서를 참조하세요.
SendRequestEx 멤버 함수를 사용하여 HTTP 서버로 전송된 요청을 종료하려면 이 멤버 함수를 호출합니다.
BOOL EndRequest(
DWORD dwFlags = 0,
LPINTERNET_BUFFERS lpBuffIn = NULL,
DWORD_PTR dwContext = 1);
dwFlags
작업을 설명하는 플래그입니다. 적절한 플래그 목록은 Windows SDK의 HttpEndRequest를 참조하세요.
lpBuffIn
작업에 사용되는 입력 버퍼를 설명하는 초기화된 INTERNET_BUFFERS 대한 포인터입니다.
dwContext
CHttpFile
작업에 대한 컨텍스트 식별자입니다. 이 매개 변수에 대한 자세한 내용은 비고를 참조하세요.
성공하면 0이 아니고, 그렇지 않으면 0입니다. 호출이 실패하면 throw 된 CInternetException 개체를 검사하여 오류의 원인을 확인합니다.
dwContext의 기본값은 MFC에서 개체를 CHttpFile
만든 CHttpFile
CInternetSession 개체의 개체로 전송됩니다. CInternetSession::OpenURL 또는 CHttpConnection을 호출하여 개체를 생성하는 CHttpFile
경우 기본값을 재정의하여 컨텍스트 식별자를 선택한 값으로 설정할 수 있습니다. 컨텍스트 식별자는 CInternetSession::OnStatusCallback으로 반환되어 식별된 개체의 상태를 제공합니다. 컨텍스트 식별자에 대한 자세한 내용은 Internet First Steps: WinInet 문서를 참조하세요.
이 멤버 함수를 호출하여 HTTP 파일의 이름을 URL로 가져옵니다.
virtual CString GetFileURL() const;
이 파일과 연결된 리소스를 참조하는 URL을 포함하는 CString 개체입니다.
SendRequest를 성공적으로 호출한 후 또는 OpenURL에서 성공적으로 만든 개체에서만 이 멤버 함수를 CHttpFile
사용합니다.
이 멤버 함수를 호출하여 이 CHttpFile
함수와 연결된 개체의 이름을 가져옵니다.
CString GetObject() const;
개체의 이름을 포함하는 CString 개체입니다.
SendRequest를 성공적으로 호출한 후 또는 OpenURL에서 성공적으로 만든 개체에서만 이 멤버 함수를 CHttpFile
사용합니다.
이 멤버 함수를 호출하여 이 CHttpFile
함수와 연결된 HTTP 동사(또는 메서드)를 가져옵니다.
CString GetVerb() const;
HTTP 동사(또는 메서드)의 이름을 포함하는 CString 개체입니다.
SendRequest를 성공적으로 호출한 후 또는 OpenURL에서 성공적으로 만든 개체에서만 이 멤버 함수를 CHttpFile
사용합니다.
HTTP 요청에서 응답 또는 요청 헤더를 반환하려면 이 멤버 함수를 호출합니다.
BOOL QueryInfo(
DWORD dwInfoLevel,
LPVOID lpvBuffer,
LPDWORD lpdwBufferLength,
LPDWORD lpdwIndex = NULL) const;
BOOL QueryInfo(
DWORD dwInfoLevel,
CString& str,
LPDWORD dwIndex = NULL) const;
BOOL QueryInfo(
DWORD dwInfoLevel,
SYSTEMTIME* pSysTime,
LPDWORD dwIndex = NULL) const;
dwInfoLevel
쿼리할 특성과 요청된 정보의 형식을 지정하는 다음 플래그의 조합입니다.
HTTP_QUERY_CUSTOM 헤더 이름을 찾고 출력의 lpvBuffer에서 이 값을 반환합니다. HTTP_QUERY_CUSTOM 헤더를 찾을 수 없으면 어설션을 throw합니다.
HTTP_QUERY_FLAG_REQUEST_HEADERS 일반적으로 애플리케이션은 응답 헤더를 쿼리하지만 애플리케이션은 이 플래그를 사용하여 요청 헤더를 쿼리할 수도 있습니다.
HTTP_QUERY_FLAG_SYSTEMTIME 값이 날짜/시간 문자열(예: "마지막 수정 시간")인 헤더의 경우 이 플래그는 데이터를 구문 분석할 애플리케이션이 필요하지 않은 표준 Win32 SYSTEMTIME 구조체로 헤더 값을 반환합니다. 이 플래그를 사용하는 경우 함수의 재정의를
SYSTEMTIME
사용할 수 있습니다.HTTP_QUERY_FLAG_NUMBER 상태 코드와 같이 값이 숫자인 헤더의 경우 이 플래그는 데이터를 32비트 숫자로 반환합니다.
가능한 값 목록은 설명 섹션을 참조하세요.
lpvBuffer
정보를 받는 버퍼에 대한 포인터입니다.
lpdwBufferLength
항목에서 이 값은 문자 또는 바이트 수의 데이터 버퍼 길이를 포함하는 값을 가리킵니다. 이 매개 변수에 대한 자세한 내용은 설명 섹션을 참조하세요.
lpdwIndex
0부터 시작하는 헤더 인덱스 포인터입니다. NULL일 수 있습니다. 이 플래그를 사용하여 동일한 이름의 여러 헤더를 열거합니다. 입력에서 lpdwIndex 는 반환할 지정된 헤더의 인덱스를 나타냅니다. 출력에서 lpdwIndex 는 다음 헤더의 인덱스를 나타냅니다. 다음 인덱스가 없으면 ERROR_HTTP_HEADER_NOT_FOUND 반환됩니다.
str
반환된 정보를 수신하는 CString 개체에 대한 참조입니다.
dwIndex
인덱스 값입니다. lpdwIndex를 참조하세요.
pSysTime
Win32 SYSTEMTIME 구조체에 대한 포인터입니다.
성공하면 0이 아니고, 그렇지 않으면 0입니다. 호출이 실패하면 Win32 함수 GetLastError 를 호출하여 오류의 원인을 확인할 수 있습니다.
SendRequest를 성공적으로 호출한 후 또는 OpenURL에서 성공적으로 만든 개체에서만 이 멤버 함수를 CHttpFile
사용합니다.
다음 형식의 데이터를 검색할 수 있습니다.QueryInfo
문자열(기본값)
SYSTEMTIME
("Data:" "Expires:" 등, 헤더의 경우)DWORD(STATUS_CODE, CONTENT_LENGTH 등)
문자열이 버퍼에 기록되고 멤버 함수가 성공 lpdwBufferLength
하면 종결 NULL 문자에 대해 문자열 길이가 1을 뺀 문자로 포함됩니다.
가능한 dwInfoLevel 값은 다음과 같습니다.
HTTP_QUERY_MIME_VERSION
HTTP_QUERY_CONTENT_TYPE
HTTP_QUERY_CONTENT_TRANSFER_ENCODING
HTTP_QUERY_CONTENT_ID
HTTP_QUERY_CONTENT_DESCRIPTION
HTTP_QUERY_CONTENT_LENGTH
HTTP_QUERY_ALLOWED_METHODS
HTTP_QUERY_PUBLIC_METHODS
HTTP_QUERY_DATE
HTTP_QUERY_EXPIRES
HTTP_QUERY_LAST_MODIFIED
HTTP_QUERY_MESSAGE_ID
HTTP_QUERY_URI
HTTP_QUERY_DERIVED_FROM
HTTP_QUERY_LANGUAGE
HTTP_QUERY_COST
HTTP_QUERY_WWW_LINK
HTTP_QUERY_PRAGMA
HTTP_QUERY_VERSION
HTTP_QUERY_STATUS_CODE
HTTP_QUERY_STATUS_TEXT
HTTP_QUERY_RAW_HEADERS
HTTP_QUERY_RAW_HEADERS_CRLF
이 멤버 함수를 호출하여 HTTP 요청과 연결된 상태 코드를 가져와서 제공된 dwStatusCode 매개 변수에 배치합니다.
BOOL QueryInfoStatusCode(DWORD& dwStatusCode) const;
dwStatusCode
상태 코드에 대한 참조입니다. 상태 코드는 요청된 이벤트의 성공 또는 실패를 나타냅니다. 상태 코드 설명의 선택 항목은 비고를 참조하세요.
성공하면 0이 아니고, 그렇지 않으면 0입니다. 호출이 실패하면 Win32 함수 GetLastError 를 호출하여 오류의 원인을 확인할 수 있습니다.
SendRequest를 성공적으로 호출한 후 또는 OpenURL에서 성공적으로 만든 개체에서만 이 멤버 함수를 CHttpFile
사용합니다.
HTTP 상태 코드는 요청의 성공 또는 실패를 나타내는 그룹으로 나타낸다. 다음 표에서는 상태 코드 그룹 및 가장 일반적인 HTTP 상태 코드를 간략하게 설명합니다.
그룹 | 의미 |
---|---|
200-299 | Success |
300-399 | 정보 |
400-499 | 요청 오류 |
500-599 | 서버 오류 |
일반적인 HTTP 상태 코드:
상태 코드 | 의미 |
---|---|
200 | URL 위치, 전송은 다음과 같습니다. |
400 | 이해할 수 없는 요청 |
404 | 요청된 URL을 찾을 수 없음 |
405 | 서버에서 요청된 메서드를 지원하지 않음 |
500 | 알 수 없는 서버 오류 |
503 | 서버 용량에 도달했습니다. |
HTTP 서버에 요청을 보내려면 이 멤버 함수를 호출합니다.
BOOL SendRequest(
LPCTSTR pstrHeaders = NULL,
DWORD dwHeadersLen = 0,
LPVOID lpOptional = NULL,
DWORD dwOptionalLen = 0);
BOOL SendRequest(
CString& strHeaders,
LPVOID lpOptional = NULL,
DWORD dwOptionalLen = 0);
pstrHeaders
보낼 헤더의 이름을 포함하는 문자열에 대한 포인터입니다.
dwHeadersLen
pstrHeaders로 식별되는 헤더의 길이입니다.
lpOptional
요청 헤더 바로 후에 보낼 선택적 데이터입니다. 일반적으로 POST 및 PUT 작업에 사용됩니다. 보낼 선택적 데이터가 없는 경우 NULL일 수 있습니다.
dwOptionalLen
lpOptional의 길이입니다.
strHeaders
전송되는 요청에 대한 헤더의 이름을 포함하는 문자열입니다.
성공하면 0이 아니고, 그렇지 않으면 0입니다. 호출이 실패하면 throw 된 CInternetException 개체를 검사하여 오류의 원인을 확인합니다.
HTTP 서버에 요청을 보내려면 이 멤버 함수를 호출합니다.
BOOL SendRequestEx(
DWORD dwTotalLen,
DWORD dwFlags = HSR_INITIATE,
DWORD_PTR dwContext = 1);
BOOL SendRequestEx(
LPINTERNET_BUFFERS lpBuffIn,
LPINTERNET_BUFFERS lpBuffOut,
DWORD dwFlags = HSR_INITIATE,
DWORD_PTR dwContext = 1);
dwTotalLen
요청에서 보낼 바이트 수입니다.
dwFlags
작업을 설명하는 플래그입니다. 적절한 플래그 목록은 Windows SDK의 HttpSendRequestEx를 참조하세요.
dwContext
CHttpFile
작업에 대한 컨텍스트 식별자입니다. 이 매개 변수에 대한 자세한 내용은 비고를 참조하세요.
lpBuffIn
작업에 사용되는 입력 버퍼를 설명하는 초기화된 INTERNET_BUFFERS 대한 포인터입니다.
lpBuffOut
작업에 사용되는 출력 버퍼를 설명하는 초기화된 INTERNET_BUFFERS 대한 포인터입니다.
성공하면 0이 아닌 값입니다. 호출이 실패하면 throw 된 CInternetException 개체를 검사하여 오류의 원인을 확인합니다.
이 함수를 사용하면 애플리케이션에서 Write 및 WriteString 메서드CInternetFile
를 사용하여 데이터를 보낼 수 있습니다. 이 함수의 재정의를 호출하기 전에 보낼 데이터의 길이를 알고 있어야 합니다. 첫 번째 재정의를 사용하면 보낼 데이터의 길이를 지정할 수 있습니다. 두 번째 재정의는 버퍼를 자세히 설명하는 데 사용할 수 있는 INTERNET_BUFFERS 구조체에 대한 포인터를 허용합니다.
콘텐츠가 파일에 기록된 후 EndRequest를 호출하여 작업을 종료합니다.
dwContext의 기본값은 MFC에서 개체를 CHttpFile
만든 CHttpFile
CInternetSession 개체의 개체로 전송됩니다. CInternetSession::OpenURL 또는 CHttpConnection을 호출하여 개체를 생성하는 CHttpFile
경우 기본값을 재정의하여 컨텍스트 식별자를 선택한 값으로 설정할 수 있습니다. 컨텍스트 식별자는 CInternetSession::OnStatusCallback으로 반환되어 식별된 개체의 상태를 제공합니다. 컨텍스트 식별자에 대한 자세한 내용은 Internet First Steps: WinInet 문서를 참조하세요.
이 코드 조각은 문자열의 콘텐츠를 LOCALHOST 서버의 MFCISAPI.DLL이라는 DLL로 보냅니다. 이 예제에서는 한 번의 호출만 사용하지만 여러 호출을 WriteString
사용하여 블록으로 데이터를 보낼 수 있습니다.
CString strData = _T("Some very long data to be POSTed here!");
pServer = session.GetHttpConnection(_T("localhost"));
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,
_T("/MFCISAPI/MFCISAPI.dll?"));
pFile->SendRequestEx(strData.GetLength());
pFile->WriteString(strData);
pFile->EndRequest();
CInternetFile 클래스
계층 구조 차트
CInternetFile 클래스
CGopherFile 클래스
CHttpConnection 클래스