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 メソッドを使用して、HTTP サーバーに要求を送信しますCInternetFile

解説

インターネット セッションが HTTP サーバーからデータを読み取る場合は、次の CHttpFileインスタンスを作成する必要があります。

他の MFC インターネット クラスでの動作の詳細については、WinInet を使用したインターネット プログラミングに関CHttpFileする記事を参照してください。

継承階層

CObject

Cfile

CStdioFile

CInternetFile

CHttpFile

必要条件

ヘッダー: 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を使用して、pstrHeaders または strAddRequestHeaders で複数のヘッダーを呼び出しに渡すことができます。 アプリケーションが 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 コンテキスト識別子。 このパラメーターの詳細については、「解説」を参照してください。

pConnection
CHttpConnection オブジェクトへのポインター。

解説

オブジェクトをCHttpFile直接構築することはなく、代わりに CInternetSession::OpenURL または CHttpConnection::OpenRequest を呼び出します。

既定値 dwContext は、MFC によって、オブジェクトを作成した CHttpFileCInternetSession オブジェクトからオブジェクトに CHttpFile 送信されます。 オブジェクトを呼び出 CInternetSession::OpenURL すか CHttpConnection 構築 CHttpFile するときに、既定値をオーバーライドして、コンテキスト識別子を選択した値に設定できます。 コンテキスト識別子が CInternetSession::OnStatusCallback に返され、識別されるオブジェクトの状態が提供されます。 コンテキスト識別子の詳細については、インターネットの最初の手順: 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 に返され、識別されるオブジェクトの状態が提供されます。 コンテキスト識別子の詳細については、インターネットの最初の手順: 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_NUMB (メガバイト)ER 状態コードなどの値が数値であるヘッダーの場合、このフラグはデータを 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 から 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
状態コードへの参照。 状態コードは、要求されたイベントの成功または失敗を示します。 状態コードの説明の選択については、「解説」を参照してください

戻り値

正常終了した場合は 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 サーバーの容量に達しました

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 オブジェクトを調べることで、エラーの原因を特定します。

解説

この関数を使用すると、アプリケーションで Write メソッドと WriteString メソッドを使用してデータをCInternetFile送信できます。 この関数のいずれかのオーバーライドを呼び出す前に、送信するデータの長さを把握しておく必要があります。 最初のオーバーライドでは、送信するデータの長さを指定できます。 2 番目のオーバーライドは、バッファーを詳細に記述するために使用できるINTERNET_BUFFERS構造体へのポインターを受け入れます。

コンテンツがファイルに書き込まれた後、EndRequest を呼び出して操作を終了します。

dwContext の既定値は、MFC によって、オブジェクトを作成した CHttpFile CInternetSession オブジェクトからオブジェクトにCHttpFile送信されます。 CInternetSession::OpenURL または CHttpConnection を呼び出してオブジェクトを構築CHttpFileする場合は、既定値をオーバーライドして、コンテキスト識別子を任意の値に設定できます。 コンテキスト識別子が CInternetSession::OnStatusCallback に返され、識別されるオブジェクトの状態が提供されます。 コンテキスト識別子の詳細については、インターネットの最初の手順: WinInet に関する記事を参照してください。

このコード フラグメントは、文字列の内容を、LOCALHOST サーバー上の MFCISAPI.DLL という名前の DLL に送信します。 この例では 1 回の呼び出し 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 クラス