次の方法で共有


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

この関数の操作を制御するフラグ。 このパラメーターには、次の値のいずれかを指定できます。

説明
ICU_ESCAPE
lpszUrlPath メンバーが指すパス文字列と lpszExtraInfolpUrlComponents パラメーターが指すURL_COMPONENTS構造体のメンバーが指す追加情報文字列内のすべてのアンセーフ文字を対応するエスケープ シーケンスに変換します。
ICU_REJECT_USERPWD
ユーザー名またはパスワード、またはその両方を含む入力として 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 を呼び出します。 返されるエラー コードは次のとおりです。

エラー コード 説明
ERROR_WINHTTP_INTERNAL_ERROR
内部エラーが発生しました。
ERROR_NOT_ENOUGH_MEMORY
要求された操作を完了するために使用できるメモリが不足しています。 (Windows エラー コード)

解説

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

メモ Windows XP と Windows 2000 については、WinHttp スタート ページの 「ランタイム要件 」セクションを参照してください。
 

次の例は、サブコンポーネントに 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 以降がインストールされています。

関連項目

Microsoft Windows HTTP Services (WinHTTP) について

Uniform Resource Locator の処理

WinHTTP バージョン

WinHttpCrackUrl