IXMLHTTPRequest2
COM公式ドキュメント
HTTP リクエストの構成と送信、および HTTP レスポンス処理中の通知をコールバックで受け取るために必要なメソッドとプロパティを提供します。メモ このインターフェイスは Windows Phone 8.1 でサポートされています。 .
解説(Remarks)
IXMLHTTPRequest2 インターフェイスは IXMLHTTPRequest3 インターフェイスによって拡張されています。IXMLHTTPRequest3 は IXMLHTTPRequest2 インターフェイスのすべてのメソッドとプロパティを継承します。
IXMLHTTPRequest2 インターフェイスは HTTP リクエスト操作を構成して送信し、レスポンス処理中の通知をコールバックで受け取ります。IXMLHTTPRequest2 により、アプリケーションはマルチスレッド アパートメント (MTA) で動作できます。これは Windows ランタイム (WinRT) で動作するための要件です。
IXMLHTTPRequest2 インターフェイスは次の機能をサポートします。
- 送信する HTTP リクエストにプロパティを設定する。
- 送信する HTTP リクエストで使用する Cookie を HTTP の Cookie ジャーに設定する。
- HTTP の Cookie ジャーから Cookie を取得する。
- HTTP レスポンスのダウンロードが完了する前に、受信中の HTTP レスポンス データを処理する。
- HTTP レスポンスを受け取るためのカスタム ストリームを作成する。
IXMLHTTPRequest2 はイベント処理にコールバック モデルを実装しています。IXMLHTTPRequest2 のメソッドは非同期呼び出しのみを許可するため、完了コールバックを受け取るには、アプリケーションが HTTP リクエストを作成するために IXMLHTTPRequest2::Open メソッドを呼び出す際に、IXMLHTTPRequest2Callback オブジェクトへのポインターを渡す必要があります。
メソッド 10
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
IXMLHTTPRequest2 のリクエストを初期化し、そのリクエストのメソッド、URL、認証情報を指定します。このメソッドを呼び出した後、リクエストとデータ (存在する場合) をサーバーに送信するには Send メソッドを呼び出す必要があります。
| pwszMethod | LPWSTR | in | 接続を開くために使用する HTTP メソッド (GET、POST など)。XMLHTTP では、このパラメーターは大文字と小文字を区別しません。 |
| pwszUrl | LPWSTR | in | リクエスト先の URL。"http://Myserver/Mypath/Myfile.asp" のような絶対 URL である必要があります。 |
| pStatusCallback | IXMLHTTPRequest2Callback* | in | コールバック イベントを受け取る、アプリが実装したコールバック インターフェイス。 Send メソッド が成功すると、レスポンスやその他のイベントを処理するためにこのインターフェイスのメソッドが呼び出されます。 |
| pwszUserName | LPWSTR | in | 認証に使用するユーザー名。このパラメーターが Null で、サイトが認証を必要とする場合、資格情報は Windows によって管理され、ログオン UI の表示も行われます (SetProperty で無効化されている場合を除く)。 |
| pwszPassword | LPWSTR | in | 認証に使用するパスワード。pwszUserName パラメーターが Null または省略されている場合、このパラメーターは無視されます。 |
| pwszProxyUserName | LPWSTR | in | プロキシ サーバーでの認証に使用するユーザー名。このパラメーターが Null または空文字列で、サイトが認証を必要とする場合、資格情報は Windows によって管理され、ログオン UI の表示も行われます (SetProperty で無効化されている場合を除く)。 |
| pwszProxyPassword | LPWSTR | in | プロキシ サーバーでの認証に使用するパスワード。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 サンプル を参照してください。
HTTP リクエストをサーバーへ非同期に送信します。成功すると、アプリが実装した IXMLHTTPRequest2Callback インターフェイスのメソッドが呼び出され、レスポンスが処理されます。
| pBody | ISequentialStream* | in | リクエストと共に送信されるメッセージの本文。このストリームは、GET 以外のリクエストでデータをアップロードするために読み取られます。アップロードが不要なリクエストでは、このパラメーターに NULL を設定します。 |
| cbBody | ULONGLONG | in | リクエストと共に送信されるメッセージの長さ (バイト単位)。アップロードが不要なリクエストでは、このパラメーターに 0 を設定します。 |
戻り値
成功すると S_OK を返します。
解説(Remarks)
Send を正常に呼び出すには、事前に Open メソッドを呼び出しておく必要があります。
このメソッドは非同期であるため、リクエストの処理が開始される前に直ちに戻ります。リクエストの処理が進むにつれて、アプリケーションには IXMLHTTPRequest2Callback インターフェイスを通じて通知されます。
POST リクエストで ISequentialStream を使用する代わりに、デスクトップ アプリでは SHCreateMemStream/SHCreateStreamOnFile を、Windows ストア アプリでは CreateStreamOverRandomAccessStream を使用できます。
現在の HTTP リクエストをキャンセルします。
戻り値
成功すると S_OK を返します。
解説(Remarks)
リクエストが中止された後、そのリクエストを表すオブジェクトは無効になります。
このメソッドはリクエストのキャンセルを保証するものではありません。アプリは、リクエストが正常に中止されたことを示す OnError コールバック メソッド、または中止処理が行われる前にリクエストが完了したことを示す OnResponseReceived コールバック メソッドを受け取るまで待機する必要があります。
指定した URL に関連付けられた Cookie を HTTP の Cookie ジャーに設定します。
| pCookie | XHR_COOKIE* | in | 指定した URL に関連付ける Cookie と、その Cookie のプロパティを指定する XHR_COOKIE 構造体へのポインター。 | ||||||||||||||
| pdwCookieState | DWORD* | out | 呼び出しが成功した場合に Cookie の状態を示す値へのポインター。 このパラメーターには、Msxml6.h ヘッダー ファイルで定義されている XHR_COOKIE_STATE 列挙型の値のいずれかを指定できます。
|
戻り値
成功すると S_OK を返します。
解説(Remarks)
SetCookie メソッドの動作は、Windows ストア アプリと Windows デスクトップ アプリケーションで異なります。
Windows ストア アプリで使用した場合、SetCookie メソッドは既定でその Windows ストア アプリ内の永続的な Cookie として設定します。XHR_COOKIE の dwFlags メンバーに XHR_COOKIE_IS_SESSION フラグが設定されている場合、Cookie はアプリの現在のセッションに対してのみ設定されます。
Windows デスクトップ アプリケーションで使用した場合、SetCookie メソッドは既定で、システム全体に適用され、すべての Windows デスクトップ アプリケーションで共有される永続的な Cookie を設定します。XHR_COOKIE の dwFlags メンバーに XHR_COOKIE_IS_SESSION フラグが設定されている場合、Cookie はその Windows デスクトップ アプリケーションの現在のセッションに対してのみ設定されます。
HTTP レスポンスを受け取るための標準ストリームに代わるカスタム ストリームを提供します。
| pSequentialStream | ISequentialStream* | in | HTTP レスポンスを受け取るカスタム ストリーム。ISequentialStream |
戻り値
成功すると S_OK を返します。
解説(Remarks)
このメソッドを呼び出すと、IXMLHTTPRequest2 はサーバーからレスポンス データを受信したときに ISequentialStream::Write メソッドを呼び出します。その時点でデータの処理を開始できますが、この呼び出しはサーバーからの後続データ受信と同一の流れで行われるため、負荷の高い処理は避けてください。IXMLHTTPRequest2 はカスタム ストリームに対して ISequentialStream::Read を呼び出さないため、アプリケーションが ISequentialStream::Read を使用する必要がない場合は E_NOTIMPL を返しても問題ありません。
送信する HTTP リクエストにプロパティを設定します。
| eProperty | XHR_PROPERTY | in | 次の値が有効です。
| ||||||||||||||||||||
| ullValue | ULONGLONG | in | アプリケーションがタイムアウトするまでに待機するミリ秒数を指定します。
|
戻り値
成功すると S_OK を返します。
解説(Remarks)
IXMLHTTPRequest2 インターフェイスの SetProperty メソッドは、IXMLHTTPRequest3 インターフェイスで新しいシナリオをサポートする次のプロパティによって拡張されています。
- XHR_PROP_NO_CACHE – HTTP リクエストに対するキャッシュの読み取りと書き込みを抑制します。
- XHR_PROP_EXTENDED_ERROR – 失敗時に、HTTP スタックが基になる Win32 エラー コードを含む HRESULT を OnError メソッドに提供するようにします。
- XHR_PROP_QUERY_STRING_UTF8 – HTTP リクエストのクエリ文字列を ACP ではなく UTF-8 でエンコードするようにします。
- XHR_PROP_IGNORE_CERT_ERRORS – 特定のサーバー証明書エラーを抑制します。
既定のリクエスト ヘッダーと共にサーバーへ送信する HTTP ヘッダーの名前を指定します。
| pwszHeader | LPWSTR | in | 大文字と小文字を区別しないヘッダー名。 |
| pwszValue | LPWSTR | in | 指定したヘッダーの値。 |
戻り値
成功すると S_OK を返します。
すべての HTTP レスポンス ヘッダーの値を取得します。
| ppwszHeaders | WORD** | 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.
指定した URL に関連付けられた Cookie を HTTP の Cookie ジャーから取得します。
| pwszUrl | LPWSTR | in | Cookie 内の URL を指定する、null で終わる文字列。 |
| pwszName | LPWSTR | in | Cookie 内の名前を指定する、null で終わる文字列。 |
| dwFlags | DWORD | in | このメソッドが Cookie を取得する方法を指定するビット フラグのセット。このパラメーターには、Msxml6.h ヘッダー ファイルで定義されている XHR_COOKIE_FLAG 列挙型の値の組み合わせを指定できます。 |
| pcCookies | DWORD* | out | 呼び出しが成功した場合に ppCookies が指す Cookie の数。 |
| ppCookies | XHR_COOKIE** | out | 指定した pwszUrl および pwszName に関連付けられた Cookie へのポインター。 |
戻り値
レスポンス ヘッダーから HTTP ヘッダーの値を取得します。
| pwszHeader | LPWSTR | in | 大文字と小文字を区別しないヘッダー名。 |
| ppwszValue | WORD** | 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 公式リファレンス: 英語 (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 指定が可能。#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 sptr,sptr #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 sptr #comfunc global IXMLHTTPRequest2_GetCookie 11 wstr,wstr,int,sptr,sptr #comfunc global IXMLHTTPRequest2_GetResponseHeader 12 wstr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。