次の方法で共有


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 、解読を試みる前に、この URL の有効性または正しい形式を確認しません。

[in] dwUrlLength

pwszUrl 文字列の長さ (文字数)。 dwUrlLength が 0 に設定されている場合、WinHttpCrackUrl は、pwszUrl 文字列が null 終了 と見なし、その前提に基づいて pwszUrl 文字列の長さを決定します。

[in] dwFlags

操作を制御するフラグ。 このパラメーターは、次のフラグの 1 つ以上の組み合わせにすることができます (値はビットごとの OR を組み合わせて使用できます)。 または、パラメーターに 0 を指定しても、特別な操作は実行されません。

価値 意味
ICU_DECODE
"エスケープ エンコード" (%xx) の文字をエスケープされていない形式に変換します。 これにより、UTF-8 などの他のエンコードはデコードされません。 この機能は、コンポーネントをコピーする URL_COMPONENTS 構造のバッファーをユーザーが提供する場合にのみ使用できます。
ICU_ESCAPE
特定の文字をエスケープ シーケンス (%xx) にエスケープします。 エスケープする文字は、ASCII 以外の文字、または HTTP 要求で表すためにエスケープする必要がある ASCII 文字です。 この機能は、コンポーネントをコピーする URL_COMPONENTS 構造のバッファーをユーザーが提供する場合にのみ使用できます。
ICU_REJECT_USERPWD
埋め込み資格情報 (ユーザー名、パスワード、またはその両方) を含む入力として URL を拒否します。 無効な URL が原因で関数が失敗した場合、GetLastError の後続の呼び出しは ERROR_WINHTTP_INVALID_URL返します。

[in, out] lpUrlComponents

URL コンポーネントを受け取る URL_COMPONENTS 構造体へのポインター。

戻り値

関数 成功した場合は TRUE、それ以外の場合は FALSE 返します。 拡張エラー情報を取得するには、GetLastError呼び出します。 返されるエラー コードの中には、次のものが含まれます。

エラー コード 形容
ERROR_WINHTTP_INTERNAL_ERROR
内部エラーが発生しました。
ERROR_WINHTTP_INVALID_URL
URL が無効です。
ERROR_WINHTTP_UNRECOGNIZED_SCHEME
URL スキームを認識できなかったか、サポートされていません。
ERROR_NOT_ENOUGH_MEMORY
要求された操作を完了するのに十分なメモリが使用できませんでした。 (Windows エラー コード)

備考

WinHTTP が非同期モードで使用されている場合 (つまり、WinHttpOpenで WINHTTP_FLAG_ASYNC 設定されている場合) でも、この関数は同期的に動作します。 戻り値は成功または失敗を示します。 拡張エラー情報を取得するには、GetLastError呼び出します。

必要なコンポーネントは、URL_COMPONENTS 構造体のメンバーによって示されます。 各コンポーネントには値へのポインターがあり、格納されている値の長さを格納するメンバーがあります。 コンポーネントの値と長さの両方が 0 の場合、そのコンポーネントは返されません。 コンポーネントの値へのポインターが NULL 、対応する長さメンバーの値が 0 以外の場合、pwszUrl 文字列内の対応するコンポーネントの最初の文字のアドレスがポインターに格納され、コンポーネントの長さが長さメンバーに格納されます。

ポインターにユーザー指定のバッファーのアドレスが含まれている場合、長さメンバーにはバッファーのサイズが含まれている必要があります。 WinHttpCrackUrl 関数は、コンポーネントをバッファーにコピーし、length メンバーはコピーされたコンポーネントの長さ (末尾の文字列ターミネータの場合は 1 を引いた値) に設定されます。 ユーザー指定のバッファーが十分な大きさでない場合、WinHttpCrackUrl は FALSE返し、GetLastError ERROR_INSUFFICIENT_BUFFERを返します。

WinHttpCrackUrl 正常に動作させるには、URL_COMPONENTS 構造体のサイズを、その構造体の dwStructSize メンバーに格納する必要があります。

pwszUrl に渡される URL のインターネット プロトコルが HTTP または HTTPS でない場合、WinHttpCrackUrl は FALSE 返し、GetLastError は示します
ERROR_WINHTTP_UNRECOGNIZED_SCHEME.

WinHttpCrackUrl は、URL の有効性や形式を確認してから解読を試みません。 その結果、""http://server?Bad=URL"" などの文字列が渡された場合、関数は正しくない結果を返します。

Windows XP および Windows 2000 の に関する注意: WinHttp のスタート ページの「Run-Time 要件」セクションを参照してください。
 

この例では、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) について

の一様なリソース ロケーターの処理

WinHTTP バージョン

WinHttpCreateUrl の