WinHttpCrackUrl 関数 (winhttp.h)
WinHttpCrackUrl 関数は、URL をホスト名やパスなどのコンポーネント部分に分割します。
構文
WINHTTPAPI BOOL WinHttpCrackUrl(
[in] LPCWSTR pwszUrl,
[in] DWORD dwUrlLength,
[in] DWORD dwFlags,
[in, out] LPURL_COMPONENTS lpUrlComponents
);
パラメーター
[in] pwszUrl
分離する正規 URL を含む文字列へのポインター。 WinHttpCrackUrl
[in] dwUrlLength
pwszUrl 文字列の長さ (文字数)。
[in] dwFlags
操作を制御するフラグ。 このパラメーターは、次のフラグの 1 つ以上の組み合わせにすることができます (値はビットごとの OR を組み合わせて使用できます)。 または、パラメーターに 0 を指定しても、特別な操作は実行されません。
価値 | 意味 |
---|---|
|
"エスケープ エンコード" (%xx) の文字をエスケープされていない形式に変換します。 これにより、UTF-8 などの他のエンコードはデコードされません。 この機能は、コンポーネントをコピーする URL_COMPONENTS 構造のバッファーをユーザーが提供する場合にのみ使用できます。 |
|
特定の文字をエスケープ シーケンス (%xx) にエスケープします。 エスケープする文字は、ASCII 以外の文字、または HTTP 要求で表すためにエスケープする必要がある ASCII 文字です。 この機能は、コンポーネントをコピーする URL_COMPONENTS 構造のバッファーをユーザーが提供する場合にのみ使用できます。 |
|
埋め込み資格情報 (ユーザー名、パスワード、またはその両方) を含む入力として URL を拒否します。 無効な URL が原因で関数が失敗した場合、GetLastError の後続の呼び出しは ERROR_WINHTTP_INVALID_URL返します。 |
[in, out] lpUrlComponents
URL コンポーネントを受け取る URL_COMPONENTS 構造体へのポインター。
戻り値
関数
エラー コード | 形容 |
---|---|
|
内部エラーが発生しました。 |
|
URL が無効です。 |
|
URL スキームを認識できなかったか、サポートされていません。 |
|
要求された操作を完了するのに十分なメモリが使用できませんでした。 (Windows エラー コード) |
備考
WinHTTP が非同期モードで使用されている場合 (つまり、WinHttpOpenで
必要なコンポーネントは、URL_COMPONENTS 構造体のメンバーによって示されます。 各コンポーネントには値へのポインターがあり、格納されている値の長さを格納するメンバーがあります。 コンポーネントの値と長さの両方が 0 の場合、そのコンポーネントは返されません。 コンポーネントの値へのポインターが NULL
ポインターにユーザー指定のバッファーのアドレスが含まれている場合、長さメンバーにはバッファーのサイズが含まれている必要があります。
WinHttpCrackUrl 関数は、コンポーネントをバッファーにコピーし、length メンバーはコピーされたコンポーネントの長さ (末尾の文字列ターミネータの場合は 1 を引いた値) に設定されます。 ユーザー指定のバッファーが十分な大きさでない場合、WinHttpCrackUrl
WinHttpCrackUrl
ERROR_WINHTTP_UNRECOGNIZED_SCHEME.
WinHttpCrackUrl は、URL の有効性や形式を確認してから解読を試みません。 その結果、""http://server?Bad=URL"" などの文字列が渡された場合、関数は正しくない結果を返します。
例
この例では、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 information.
// New info 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 [デスクトップ アプリのみ] |
ターゲット プラットフォーム の |
ウィンドウズ |
ヘッダー | winhttp.h |
ライブラリ | Winhttp.lib |
DLL | Winhttp.dll |
再頒布可能パッケージの | Windows XP および Windows 2000 の WinHTTP 5.0 および Internet Explorer 5.01 以降。 |
関連項目
Microsoft Windows HTTP Services (WinHTTP) について
WinHttpCreateUrl の