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_COMPONENTS 结构的指针,该结构包含要从中创建 URL 的组件。

[in] dwFlags

控制此函数操作的标志。 此参数的取值可为下列值之一:

含义
ICU_ESCAPE
将所有不安全字符转换为 lpszUrlPath 成员指向的路径字符串中的相应转义序列,并在 lpszExtraInfo 中转换为由 lpUrlComponents 参数指向的 URL_COMPONENTS 结构的成员所指向的额外信息字符串。
ICU_REJECT_USERPWD
拒绝 URL 作为包含用户名或密码或同时包含两者的输入。 如果函数因 URL 无效而失败,则对 GetLastError 的后续调用将返回ERROR_WINHTTP_INVALID_URL。

[out] pwszUrl

指向字符缓冲区的指针,该缓冲区将 URL 作为宽字符接收 (Unicode) 字符串。

[in, out] pdwUrlLength

指向无符号长整型变量的指针,该变量接收 pwszUrl 缓冲区的长度(以宽 (Unicode) 字符为单位)。 当函数返回时,此参数接收 URL 字符串的长度宽(以字符为单位),对于终止字符为减 1。 如果 GetLastError 返回ERROR_INSUFFICIENT_BUFFER,则此参数接收保存创建的 URL 所需的宽字符数。

返回值

如果函数成功,则返回 TRUE ,否则返回 FALSE 。 若要获取扩展的错误数据,请调用 GetLastError。 返回的错误代码如下。

错误代码 说明
ERROR_WINHTTP_INTERNAL_ERROR
发生内部错误。
ERROR_NOT_ENOUGH_MEMORY
可用内存不足,无法完成请求的操作。 (Windows 错误代码)

注解

即使在异步模式下使用 WinHTTP,即在 WinHttpOpen 中设置了WINHTTP_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 和 Internet Explorer 5.01 或更高版本。

另请参阅

关于 Microsoft Windows HTTP Services (WinHTTP)

处理统一资源定位符

WinHTTP 版本

WinHttpCrackUrl