Win32 API 日本語リファレンス
ホームData.Xml.MsXml › IXMLHTTPRequest2

IXMLHTTPRequest2

COM
IIDe5d37dc0-552a-4d52-9cc0-a14d546fbd04継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

HTTP リクエストの構成と送信、および HTTP レスポンス処理中の通知をコールバックで受け取るために必要なメソッドとプロパティを提供します。メモ このインターフェイスは Windows Phone 8.1 でサポートされています。 .

解説(Remarks)

IXMLHTTPRequest2 インターフェイスは IXMLHTTPRequest3 インターフェイスによって拡張されています。IXMLHTTPRequest3IXMLHTTPRequest2 インターフェイスのすべてのメソッドとプロパティを継承します。

IXMLHTTPRequest2 インターフェイスは HTTP リクエスト操作を構成して送信し、レスポンス処理中の通知をコールバックで受け取ります。IXMLHTTPRequest2 により、アプリケーションはマルチスレッド アパートメント (MTA) で動作できます。これは Windows ランタイム (WinRT) で動作するための要件です。

IXMLHTTPRequest2 インターフェイスは次の機能をサポートします。

IXMLHTTPRequest2 はイベント処理にコールバック モデルを実装しています。IXMLHTTPRequest2 のメソッドは非同期呼び出しのみを許可するため、完了コールバックを受け取るには、アプリケーションが HTTP リクエストを作成するために IXMLHTTPRequest2::Open メソッドを呼び出す際に、IXMLHTTPRequest2Callback オブジェクトへのポインターを渡す必要があります。

メソッド 10

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT Open(LPWSTR pwszMethod, LPWSTR pwszUrl, IXMLHTTPRequest2Callback* pStatusCallback, LPWSTR pwszUserName, LPWSTR pwszPassword, LPWSTR pwszProxyUserName, LPWSTR pwszProxyPassword)

IXMLHTTPRequest2 のリクエストを初期化し、そのリクエストのメソッド、URL、認証情報を指定します。このメソッドを呼び出した後、リクエストとデータ (存在する場合) をサーバーに送信するには Send メソッドを呼び出す必要があります。

pwszMethodLPWSTRin接続を開くために使用する HTTP メソッド (GETPOST など)。XMLHTTP では、このパラメーターは大文字と小文字を区別しません。
pwszUrlLPWSTRinリクエスト先の URL。"http://Myserver/Mypath/Myfile.asp" のような絶対 URL である必要があります。
pStatusCallbackIXMLHTTPRequest2Callback*in

コールバック イベントを受け取る、アプリが実装したコールバック インターフェイス。

Send メソッド が成功すると、レスポンスやその他のイベントを処理するためにこのインターフェイスのメソッドが呼び出されます。

pwszUserNameLPWSTRin認証に使用するユーザー名。このパラメーターが Null で、サイトが認証を必要とする場合、資格情報は Windows によって管理され、ログオン UI の表示も行われます (SetProperty で無効化されている場合を除く)。
pwszPasswordLPWSTRin認証に使用するパスワード。pwszUserName パラメーターが Null または省略されている場合、このパラメーターは無視されます。
pwszProxyUserNameLPWSTRinプロキシ サーバーでの認証に使用するユーザー名。このパラメーターが Null または空文字列で、サイトが認証を必要とする場合、資格情報は Windows によって管理され、ログオン UI の表示も行われます (SetProperty で無効化されている場合を除く)。
pwszProxyPasswordLPWSTRinプロキシ サーバーでの認証に使用するパスワード。pwszProxyUserName パラメーターが Null または省略されている場合、このパラメーターは無視されます。

戻り値

成功すると S_OK を返します。

解説(Remarks)

このメソッドはパラメーターで資格情報を渡せますが、これらの資格情報が最初のリクエストで自動的にサーバーへ送信されるわけではありません。pwszUserName および pwszPassword パラメーターは、サーバーが 401 - Unauthorized レスポンスでクライアントに資格情報を要求しない限り、サーバーへ送信されません。

//
// Create and initialize an IXMLHTTPRequest2 object
//
hr = CoCreateInstance(CLSID_FreeThreadedXMLHTTP60,
                      NULL,
                      CLSCTX_INPROC_SERVER,
                      IID_PPV_ARGS(&spXHR));

//
//Create and initialize an IXMLHTTPRequest2Callback object
//
hr = MakeAndInitialize<CXMLHttpRequest2Callback>(&spXhrCallback);

hr = spXHR->Open(L"GET",              // Method.
                 pcwszUrl,            // Url.
                 spXhrCallback.Get(), // Callback.
                 NULL,                // Username.
                 NULL,                // Password.
                 NULL,                // Proxy username.
                 NULL);               // Proxy password.

//
//Send the GET request
//
hr = spXHR->Send(NULL, 0);

hr = spXhrCallback->WaitForComplete(&dwStatus);

完全な例については、XML HTTP Request 2 GET サンプル および XML HTTP Request 2 POST サンプル を参照してください。

vtbl 4 HRESULT Send(ISequentialStream* pBody, ULONGLONG cbBody)

HTTP リクエストをサーバーへ非同期に送信します。成功すると、アプリが実装した IXMLHTTPRequest2Callback インターフェイスのメソッドが呼び出され、レスポンスが処理されます。

pBodyISequentialStream*inリクエストと共に送信されるメッセージの本文。このストリームは、GET 以外のリクエストでデータをアップロードするために読み取られます。アップロードが不要なリクエストでは、このパラメーターに NULL を設定します。
cbBodyULONGLONGinリクエストと共に送信されるメッセージの長さ (バイト単位)。アップロードが不要なリクエストでは、このパラメーターに 0 を設定します。

戻り値

成功すると S_OK を返します。

解説(Remarks)

Send を正常に呼び出すには、事前に Open メソッドを呼び出しておく必要があります。

このメソッドは非同期であるため、リクエストの処理が開始される前に直ちに戻ります。リクエストの処理が進むにつれて、アプリケーションには IXMLHTTPRequest2Callback インターフェイスを通じて通知されます。

POST リクエストで ISequentialStream を使用する代わりに、デスクトップ アプリでは SHCreateMemStream/SHCreateStreamOnFile を、Windows ストア アプリでは CreateStreamOverRandomAccessStream を使用できます。

vtbl 5 HRESULT Abort()

現在の HTTP リクエストをキャンセルします。

戻り値

成功すると S_OK を返します。

解説(Remarks)

リクエストが中止された後、そのリクエストを表すオブジェクトは無効になります。

このメソッドはリクエストのキャンセルを保証するものではありません。アプリは、リクエストが正常に中止されたことを示す OnError コールバック メソッド、または中止処理が行われる前にリクエストが完了したことを示す OnResponseReceived コールバック メソッドを受け取るまで待機する必要があります。

vtbl 6 HRESULT SetCookie(XHR_COOKIE* pCookie, DWORD* pdwCookieState)

指定した URL に関連付けられた Cookie を HTTP の Cookie ジャーに設定します。

pCookieXHR_COOKIE*in指定した URL に関連付ける Cookie と、その Cookie のプロパティを指定する XHR_COOKIE 構造体へのポインター。
pdwCookieStateDWORD*out

呼び出しが成功した場合に Cookie の状態を示す値へのポインター。

このパラメーターには、Msxml6.h ヘッダー ファイルで定義されている XHR_COOKIE_STATE 列挙型の値のいずれかを指定できます。

意味
XHR_COOKIE_STATE_UNKNOWN
0
予約済みです。
XHR_COOKIE_STATE_ACCEPT
1
Cookie が受け入れられました。
XHR_COOKIE_STATE_PROMPT
2
Cookie を受け入れるか拒否するかをユーザーに確認します。
XHR_COOKIE_STATE_LEASH
3
Cookie はファーストパーティ コンテキストでのみ受け入れられます。
XHR_COOKIE_STATE_DOWNGRADE
4
Cookie は受け入れられ、セッション Cookie になりました。
XHR_COOKIE_STATE_REJECT
5
Cookie は拒否されました。

戻り値

成功すると S_OK を返します。

解説(Remarks)

SetCookie メソッドの動作は、Windows ストア アプリと Windows デスクトップ アプリケーションで異なります。

Windows ストア アプリで使用した場合、SetCookie メソッドは既定でその Windows ストア アプリ内の永続的な Cookie として設定します。XHR_COOKIEdwFlags メンバーに XHR_COOKIE_IS_SESSION フラグが設定されている場合、Cookie はアプリの現在のセッションに対してのみ設定されます。

Windows デスクトップ アプリケーションで使用した場合、SetCookie メソッドは既定で、システム全体に適用され、すべての Windows デスクトップ アプリケーションで共有される永続的な Cookie を設定します。XHR_COOKIEdwFlags メンバーに XHR_COOKIE_IS_SESSION フラグが設定されている場合、Cookie はその Windows デスクトップ アプリケーションの現在のセッションに対してのみ設定されます。

vtbl 7 HRESULT SetCustomResponseStream(ISequentialStream* pSequentialStream)

HTTP レスポンスを受け取るための標準ストリームに代わるカスタム ストリームを提供します。

pSequentialStreamISequentialStream*inHTTP レスポンスを受け取るカスタム ストリーム。ISequentialStream

戻り値

成功すると S_OK を返します。

解説(Remarks)

このメソッドを呼び出すと、IXMLHTTPRequest2 はサーバーからレスポンス データを受信したときに ISequentialStream::Write メソッドを呼び出します。その時点でデータの処理を開始できますが、この呼び出しはサーバーからの後続データ受信と同一の流れで行われるため、負荷の高い処理は避けてください。IXMLHTTPRequest2 はカスタム ストリームに対して ISequentialStream::Read を呼び出さないため、アプリケーションが ISequentialStream::Read を使用する必要がない場合は E_NOTIMPL を返しても問題ありません。

vtbl 8 HRESULT SetProperty(XHR_PROPERTY eProperty, ULONGLONG ullValue)

送信する HTTP リクエストにプロパティを設定します。

ePropertyXHR_PROPERTYin

次の値が有効です。

意味
XHR_PROP_NO_CRED_PROMPT
ユーザー資格情報の自動プロンプトを抑制します
XHR_PROP_NO_AUTH
HTTP スタックがアプリケーションに代わって実行する認証を抑制します
XHR_PROP_TIMEOUT
すべてのタイムアウト値を ullValue で指定した値 (ミリ秒単位) に設定します。
XHR_PROP_NO_DEFAULT_HEADERS
HTTP リクエストへの既定のヘッダーの追加を抑制します。
XHR_PROP_REPORT_REDIRECT_STATUS
HTTP スタックが、途中のリダイレクト状態コードを伴って OnHeadersAvailable メソッドを呼び出すようにします。OnHeadersAvailable メソッドは、追加のリダイレクトおよび最終的な宛先の状態コードについても再度呼び出されます。
XHR_PROP_NO_CACHE
HTTP リクエストに対するキャッシュの読み取りと書き込みを抑制します。

このプロパティは IXMLHTTPRequest3 インターフェイスでサポートされます。

XHR_PROP_EXTENDED_ERROR
失敗時に、HTTP スタックが基になる Win32 エラー コードを含む HRESULT を OnError メソッドに提供するようにします。

このプロパティは IXMLHTTPRequest3 インターフェイスでサポートされます。

XHR_PROP_QUERY_STRING_UTF8
HTTP リクエストのクエリ文字列を ACP ではなく UTF-8 でエンコードするようにします。

このプロパティは IXMLHTTPRequest3 インターフェイスでサポートされます。

XHR_PROP_IGNORE_CERT_ERRORS
特定の証明書エラーを抑制します。

このプロパティは IXMLHTTPRequest3 インターフェイスでサポートされます。

ullValueULONGLONGin

アプリケーションがタイムアウトするまでに待機するミリ秒数を指定します。

意味
XHR_PROP_NO_CRED_PROMPT
このパラメーターには、Msxml6.h ヘッダー ファイルで定義されている XHR_CRED_PROMPT 列挙型の値のいずれかを指定できます。
XHR_PROP_NO_AUTH
このパラメーターには、Msxml6.h ヘッダー ファイルで定義されている XHR_AUTH 列挙型の値のいずれかを指定できます。
  • 認証を有効にする場合は XHR_AUTH_ALL (既定値)
  • 認証を無効にする場合は XHR_AUTH_NONE
  • 認証をプロキシ認証に対してのみ有効にする場合は XHR_AUTH_PROXY
XHR_PROP_TIMEOUT
アプリがタイムアウトするまでに待機するミリ秒数 (最大 0xFFFFFFFF)。
XHR_PROP_NO_DEFAULT_HEADERS
  • 既定のヘッダーの追加を有効にする場合は FALSE(0x0) (既定値)
  • 既定のヘッダーの追加を無効にする場合は TRUE(0x1)。
XHR_PROP_REPORT_REDIRECT_STATUS
  • リダイレクト状態を報告しない場合は FALSE(0x0) (既定値)
  • リダイレクト状態を報告する場合は TRUE(0x1)。
XHR_PROP_NO_CACHE
  • キャッシュを有効にする場合は FALSE(0x0) (既定値)
  • キャッシュを無効にする場合は TRUE(0x1)。
XHR_PROP_EXTENDED_ERROR
  • 拡張エラーを提供しない場合は FALSE(0x0) (既定値)
  • 拡張エラーを提供する場合は TRUE(0x1)。
XHR_PROP_QUERY_STRING_UTF8
  • クエリ文字列を UTF-8 でエンコードしない場合は FALSE(0x0) (既定値)
  • クエリ文字列を UTF-8 でエンコードする場合は TRUE(0x1)。
XHR_PROP_IGNORE_CERT_ERRORS
  • 証明書エラーを無視しない場合は FALSE(0x0) (既定値)
  • 証明書エラーを無視する場合は TRUE(0x1)。

戻り値

成功すると S_OK を返します。

解説(Remarks)

IXMLHTTPRequest2 インターフェイスの SetProperty メソッドは、IXMLHTTPRequest3 インターフェイスで新しいシナリオをサポートする次のプロパティによって拡張されています。

vtbl 9 HRESULT SetRequestHeader(LPWSTR pwszHeader, LPWSTR pwszValue)

既定のリクエスト ヘッダーと共にサーバーへ送信する HTTP ヘッダーの名前を指定します。

pwszHeaderLPWSTRin大文字と小文字を区別しないヘッダー名。
pwszValueLPWSTRin指定したヘッダーの値。

戻り値

成功すると S_OK を返します。

vtbl 10 HRESULT GetAllResponseHeaders(WORD** ppwszHeaders)

すべての HTTP レスポンス ヘッダーの値を取得します。

ppwszHeadersWORD**out返されるヘッダー情報。このパラメーターに使用されたメモリは CoTaskMemFree メソッドで解放してください。

戻り値

成功すると S_OK を返します。

解説(Remarks)

各ヘッダーの名前と値のペアは、復帰と改行の組み合わせで区切られます。

返されるレスポンス ヘッダー情報は、OnHeadersAvailable コールバック メソッドが呼び出された後にのみ有効です。

HRESULT hr = S_OK;
WCHAR *pwszHeaderValue = NULL;
IXMLHTTPRequest2 *pIXMLHTTPRequest2 = NULL;

// Create IXMLHTTPRequest2 object and initialize pIXMLHTTPRequest2.
hr = pIXMLHTTPRequest2->GetAllResponseHeaders(&pwszHeaderValue);
if(SUCCEEDED(hr))
{
  MessageBox(NULL, pwszHeaderValue, L"All Response Headers", MB_OK);
}

if (pwszHeaderValue != NULL)
{
      CoTaskMemFree(pwszHeaderValue);
      pwszHeaderValue = NULL;
}

// Release pIXMLHTTPRequest2 when finished with it.
vtbl 11 HRESULT GetCookie(LPWSTR pwszUrl, LPWSTR pwszName, DWORD dwFlags, DWORD* pcCookies, XHR_COOKIE** ppCookies)

指定した URL に関連付けられた Cookie を HTTP の Cookie ジャーから取得します。

pwszUrlLPWSTRinCookie 内の URL を指定する、null で終わる文字列。
pwszNameLPWSTRinCookie 内の名前を指定する、null で終わる文字列。
dwFlagsDWORDinこのメソッドが Cookie を取得する方法を指定するビット フラグのセット。このパラメーターには、Msxml6.h ヘッダー ファイルで定義されている XHR_COOKIE_FLAG 列挙型の値の組み合わせを指定できます。
pcCookiesDWORD*out呼び出しが成功した場合に ppCookies が指す Cookie の数。
ppCookiesXHR_COOKIE**out指定した pwszUrl および pwszName に関連付けられた Cookie へのポインター。

戻り値

成功すると S_OK を返します。E_FAIL はエラーを示します。

vtbl 12 HRESULT GetResponseHeader(LPWSTR pwszHeader, WORD** ppwszValue)

レスポンス ヘッダーから HTTP ヘッダーの値を取得します。

pwszHeaderLPWSTRin大文字と小文字を区別しないヘッダー名。
ppwszValueWORD**out取得されるヘッダー情報。このパラメーターのメモリは CoTaskMemFree 関数を呼び出して解放してください。

戻り値

成功すると S_OK を返します。

解説(Remarks)

このメソッドの結果は、OnHeadersAvailable コールバック メソッドが呼び出された後にのみ有効です。

HRESULT hr = S_OK;
WCHAR *pwszHeaderValue = NULL;
IXMLHTTPRequest2 *pIXMLHTTPRequest2 = NULL;

// Create XMLHTTPRequest2 object and initialize pIXMLHTTP2Request.
hr = pIXMLHTTPRequest2->GetResponseHeader(L"Server", &pwszHeaderValue);
if(SUCCEEDED(hr))
{
   MessageBox(NULL, pwszHeaderValue, L"Response Header-Server", MB_OK);   
}   

if (pwszHeaderValue != NULL)
{
   CoTaskMemFree(pwszHeaderValue);
   pwszHeaderValue = NULL;
}

// Release pIXMLHTTPRequest2 when finished with it.
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IXMLHTTPRequest2 "{E5D37DC0-552A-4D52-9CC0-A14D546FBD04}"
#usecom global IXMLHTTPRequest2 IID_IXMLHTTPRequest2 "{ED8C108E-4349-11D2-91A4-00C04F7969E8}"
#comfunc global IXMLHTTPRequest2_Open                     3 wstr,wstr,sptr,wstr,wstr,wstr,wstr
#comfunc global IXMLHTTPRequest2_Send                     4 sptr,int64
#comfunc global IXMLHTTPRequest2_Abort                    5
#comfunc global IXMLHTTPRequest2_SetCookie                6 var,var
#comfunc global IXMLHTTPRequest2_SetCustomResponseStream  7 sptr
#comfunc global IXMLHTTPRequest2_SetProperty              8 int,int64
#comfunc global IXMLHTTPRequest2_SetRequestHeader         9 wstr,wstr
#comfunc global IXMLHTTPRequest2_GetAllResponseHeaders    10 var
#comfunc global IXMLHTTPRequest2_GetCookie                11 wstr,wstr,int,var,var
#comfunc global IXMLHTTPRequest2_GetResponseHeader        12 wstr,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。