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 | CInternetFile の Write メソッドまたは WriteString メソッドを使用して、HTTP サーバーに要求を送信します。 |
解説
インターネット セッションが HTTP サーバーからデータを読み取る場合は、 CHttpFile
のインスタンスを作成する必要があります。
他の MFC インターネット クラスと連携 CHttpFile
方法の詳細については、「WinInet を使用したInternet プログラミング 」の記事を参照してください。
継承階層
CHttpFile
要件
Header: afxinet.h
CHttpFile::AddRequestHeaders
このメンバー関数を呼び出して、HTTP 要求ハンドルに 1 つ以上の 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 サーバーに送信される正確な要求を詳細に制御する必要がある高度なクライアントが使用することを目的としています。
Note
アプリケーションは、HTTP_ADDREQ_FLAG_ADDまたはHTTP_ADDREQ_FLAG_ADD_IF_NEWを使用してAddRequestHeaders
呼び出しのためにpstrHeadersまたはstrで複数のヘッダーを渡すことができます。 アプリケーションが HTTP_ADDREQ_FLAG_REMOVE または HTTP_ADDREQ_FLAG_REPLACE を使用してヘッダーを削除または置換しようとすると、 lpszHeaders で指定できるヘッダーは 1 つだけ。
CHttpFile::CHttpFile
このメンバー関数は、 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
オブジェクトのコンテキスト識別子。 このパラメーターの詳細については、 Remarks を参照してください。
pConnection
CHttpConnection オブジェクトへのポインター。
解説
CHttpFile
オブジェクトを直接構築することはなく、代わりに CInternetSession::OpenURL または CHttpConnection::OpenRequest を呼び出します。
dwContext
の既定値は、MFC によって、CHttpFile
オブジェクトを作成した CInternetSession オブジェクトからCHttpFile
オブジェクトに送信されます。 CInternetSession::OpenURL
またはCHttpConnection
を呼び出してCHttpFile
オブジェクトを構築する場合は、既定値をオーバーライドして、コンテキスト識別子を選択した値に設定できます。 コンテキスト識別子が CInternetSession::OnStatusCallback に返され、識別されるオブジェクトの状態が提供されます。 コンテキスト識別子の詳細については、「 Internet First Steps: WinInet 」を参照してください。
CHttpFile::EndRequest
このメンバー関数を呼び出して、 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 を返します。 呼び出しが失敗した場合は、スローされた CInternetException オブジェクトを調べることで、エラーの原因を特定します。
解説
dwContext の既定値は、MFC によって、CHttpFile
オブジェクトを作成した CInternetSession オブジェクトからCHttpFile
オブジェクトに送信されます。 CInternetSession::OpenURL または CHttpConnection を呼び出してCHttpFile
オブジェクトを構築する場合は、既定値をオーバーライドして、コンテキスト識別子を任意の値に設定できます。 コンテキスト識別子が CInternetSession::OnStatusCallback に返され、識別されるオブジェクトの状態が提供されます。 コンテキスト識別子の詳細については、「 Internet First Steps: WinInet 」を参照してください。
CHttpFile::GetFileURL
このメンバー関数を呼び出して、HTTP ファイルの名前を URL として取得します。
virtual CString GetFileURL() const;
戻り値
このファイルに関連付けられているリソースを参照する URL を含む CString オブジェクト。
解説
このメンバー関数は、SendRequest または OpenURL によって正常に作成されたCHttpFile
オブジェクトに対して正常に呼び出された後にのみ使用します。
CHttpFile::GetObject
このメンバー関数を呼び出して、この CHttpFile
に関連付けられているオブジェクトの名前を取得します。
CString GetObject() const;
戻り値
オブジェクトの名前を含む CString オブジェクト。
解説
このメンバー関数は、SendRequest または OpenURL によって正常に作成されたCHttpFile
オブジェクトに対して正常に呼び出された後にのみ使用します。
CHttpFile::GetVerb
このメンバー関数を呼び出して、この CHttpFile
に関連付けられている HTTP 動詞 (またはメソッド) を取得します。
CString GetVerb() const;
戻り値
HTTP 動詞 (またはメソッド) の名前を含む CString オブジェクト。
解説
このメンバー関数は、SendRequest または OpenURL によって正常に作成されたCHttpFile
オブジェクトに対して正常に呼び出された後にのみ使用します。
CHttpFile::QueryInfo
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はアサーションをスローします。
HTTP_QUERY_FLAG_REQUEST_HEADERS通常、アプリケーションは応答ヘッダーに対してクエリを実行しますが、アプリケーションはこのフラグを使用して要求ヘッダーのクエリを実行することもできます。
HTTP_QUERY_FLAG_SYSTEMTIME値が日付/時刻文字列 ("Last-Modified-Time" など) であるヘッダーの場合、このフラグは、アプリケーションがデータを解析する必要のない標準 Win32 SYSTEMTIME 構造体としてヘッダー値を返します。 このフラグを使用する場合は、関数の
SYSTEMTIME
オーバーライドを使用できます。HTTP_QUERY_FLAG_NUMBER 状態コードなどの値が数値であるヘッダーの場合、このフラグはデータを 32 ビット数値として返します。
使用可能な値の一覧については、「 Remarks 」セクションを参照してください。
lpvBuffer
情報を受け取るバッファーへのポインター。
lpdwBufferLength
入力時に、これはデータ バッファーの長さを含む値 (文字数またはバイト数) を指します。 このパラメーターの詳細については、「 Remarks 」セクションを参照してください。
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 から 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
CHttpFile::QueryInfoStatusCode
このメンバー関数を呼び出して、HTTP 要求に関連付けられている状態コードを取得し、指定された dwStatusCode パラメーターに配置します。
BOOL QueryInfoStatusCode(DWORD& dwStatusCode) const;
パラメーター
dwStatusCode
状態コードへの参照。 状態コードは、要求されたイベントの成功または失敗を示します。 状態コードの説明については、 Remarks を参照してください。
戻り値
正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。 呼び出しが失敗した場合、Win32 関数 GetLastError を呼び出して、エラーの原因を特定できます。
解説
このメンバー関数は、SendRequest または OpenURL によって正常に作成されたCHttpFile
オブジェクトに対して正常に呼び出された後にのみ使用します。
HTTP 状態コードは、要求の成功または失敗を示すグループに分類されます。 次の表は、状態コード グループと最も一般的な HTTP 状態コードの概要を示しています。
グループ | 意味 |
---|---|
200 から 299 | 成功 |
300 から 399 | 情報 |
400-499 | 要求エラー |
500-599 | サーバー エラー |
一般的な HTTP 状態コード:
状態コード | 意味 |
---|---|
200 | URL が見つけられます。転送は次のとおりです |
400 | 読み取り不可能な要求 |
404 | 要求された URL が見つかりません |
405 | サーバーは要求されたメソッドをサポートしていません |
500 | 不明なサーバー エラー |
503 | サーバーの容量に達しました |
CHttpFile::SendRequest
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 を返します。 呼び出しが失敗した場合は、スローされた CInternetException オブジェクトを調べることで、エラーの原因を特定します。
CHttpFile::SendRequestEx
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 以外。 呼び出しが失敗した場合は、スローされた CInternetException オブジェクトを調べることで、エラーの原因を特定します。
解説
この関数を使用すると、アプリケーションは、CInternetFile
の Write メソッドと WriteString メソッドを使用してデータを送信できます。 この関数のいずれかのオーバーライドを呼び出す前に、送信するデータの長さを把握しておく必要があります。 最初のオーバーライドでは、送信するデータの長さを指定できます。 2 番目のオーバーライドは、バッファーを詳細に記述するために使用できるINTERNET_BUFFERS構造体へのポインターを受け入れます。
コンテンツがファイルに書き込まれた後、 EndRequest を呼び出して操作を終了します。
dwContext の既定値は、MFC によって、CHttpFile
オブジェクトを作成した CInternetSession オブジェクトからCHttpFile
オブジェクトに送信されます。 CInternetSession::OpenURL または CHttpConnection を呼び出してCHttpFile
オブジェクトを構築する場合は、既定値をオーバーライドして、コンテキスト識別子を任意の値に設定できます。 コンテキスト識別子が CInternetSession::OnStatusCallback に返され、識別されるオブジェクトの状態が提供されます。 コンテキスト識別子の詳細については、「 Internet First Steps: WinInet 」を参照してください。
例
このコード フラグメントは、文字列の内容を LOCALHOST サーバー上の MFCISAPI.DLL という名前の DLL に送信します。 この例では、 WriteString
の呼び出しを 1 つだけ使用しますが、複数の呼び出しを使用してブロック内のデータを送信できます。
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 クラス