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
控制此函数操作的标志。 此参数的取值可为下列值之一:
值 | 含义 |
---|---|
|
将所有不安全字符转换为 lpszUrlPath 成员指向的路径字符串中的相应转义序列,并在 lpszExtraInfo 中转换为由 lpUrlComponents 参数指向的 URL_COMPONENTS 结构的成员所指向的额外信息字符串。 |
|
拒绝 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。 返回的错误代码如下。
错误代码 | 说明 |
---|---|
|
发生内部错误。 |
|
可用内存不足,无法完成请求的操作。 (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 或更高版本。 |