WinHttpCreateUrl 関数 (winhttp.h)
WinHttpCreateUrl 関数は、ホスト名やパスなどのコンポーネント部分から URL を作成します。
構文
WINHTTPAPI BOOL WinHttpCreateUrl(
[in] LPURL_COMPONENTS lpUrlComponents,
[in] DWORD dwFlags,
[out] LPWSTR pwszUrl,
[in, out] LPDWORD pdwUrlLength
);
パラメーター
[in] lpUrlComponents
URL の作成元となるコンポーネントを含む URL_COMPONENTS 構造体へのポインター。
[in] dwFlags
この関数の操作を制御するフラグ。 このパラメーターには、次の値のいずれかを指定できます。
値 | 説明 |
---|---|
|
lpszUrlPath メンバーが指すパス文字列と lpszExtraInfo の lpUrlComponents パラメーターが指すURL_COMPONENTS構造体のメンバーが指す追加情報文字列内のすべてのアンセーフ文字を対応するエスケープ シーケンスに変換します。 |
|
ユーザー名またはパスワード、またはその両方を含む入力として URL を拒否します。 無効な URL が原因で関数が失敗した場合、GetLastError の後続の呼び出しはERROR_WINHTTP_INVALID_URLを返します。 |
[out] pwszUrl
URL をワイド文字 (Unicode) 文字列として受け取る文字バッファーへのポインター。
[in, out] pdwUrlLength
ワイド (Unicode) 文字で pwszUrl バッファーの長さを受け取る符号なし長整数型の変数へのポインター。 関数が戻るときに、このパラメーターは URL 文字列の長さを文字単位で受け取り、終端文字の場合は 1 を引いた値を受け取ります。 GetLastError がERROR_INSUFFICIENT_BUFFERを返す場合、このパラメーターは、作成された URL を保持するために必要なワイド文字の数を受け取ります。
戻り値
関数が成功した場合は TRUE 、それ以外の場合 は FALSE を 返します。 拡張エラー データを取得するには、 GetLastError を呼び出します。 返されるエラー コードは次のとおりです。
エラー コード | 説明 |
---|---|
|
内部エラーが発生しました。 |
|
要求された操作を完了するために使用できるメモリが不足しています。 (Windows エラー コード) |
解説
WinHTTP が非同期モードで使用されている場合、つまり WinHttpOpen でWINHTTP_FLAG_ASYNCが設定されている場合でも、この関数は同期的に動作します。 戻り値は成功または失敗を示します。 拡張エラー データを取得するには、 GetLastError を呼び出します。
例
次の例は、サブコンポーネントに URL を逆コンパイル (クラック) し、コンポーネントを更新してから URL を再構築する方法を示しています。
URL_COMPONENTS urlComp;
LPCWSTR pwszUrl1 =
L"http://search.msn.com/results.asp?RS=CHECKED&FORM=MSNH&v=1&q=wininet";
DWORD dwUrlLen = 0;
// Initialize the URL_COMPONENTS structure.
ZeroMemory(&urlComp, sizeof(urlComp));
urlComp.dwStructSize = sizeof(urlComp);
// Set required component lengths to non-zero,
// so that they are cracked.
urlComp.dwSchemeLength = (DWORD)-1;
urlComp.dwHostNameLength = (DWORD)-1;
urlComp.dwUrlPathLength = (DWORD)-1;
urlComp.dwExtraInfoLength = (DWORD)-1;
// Crack the URL.
if (!WinHttpCrackUrl( pwszUrl1, (DWORD)wcslen(pwszUrl1), 0, &urlComp))
{
printf("Error %u in WinHttpCrackUrl.\n", GetLastError());
}
else
{
// Change the search data. New data is the same length.
urlComp.lpszExtraInfo = L"?RS=CHECKED&FORM=MSNH&v=1&q=winhttp";
// Obtain the size of the new URL and allocate memory.
WinHttpCreateUrl( &urlComp, 0, NULL, &dwUrlLen);
LPWSTR pwszUrl2 = new WCHAR[dwUrlLen];
// Create a new URL.
if(!WinHttpCreateUrl( &urlComp, 0, pwszUrl2, &dwUrlLen))
{
printf( "Error %u in WinHttpCreateUrl.\n", GetLastError());
}
else
{
// Show both URLs.
printf( "Old URL: %S\nNew URL: %S\n", pwszUrl1, pwszUrl2);
}
// Free allocated memory.
delete [] pwszUrl2;
}
要件
サポートされている最小のクライアント | Windows XP、Windows 2000 Professional SP3 [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2003、Windows 2000 Server SP3 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | winhttp.h |
Library | Winhttp.lib |
[DLL] | Winhttp.dll |
再頒布可能パッケージ | Windows XP および Windows 2000 では、WinHTTP 5.0 およびインターネット エクスプローラー 5.01 以降がインストールされています。 |