Функция 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
Флаги, управляющие работой этой функции. Этот параметр может принимать одно из указанных ниже значений.
Значение | Значение |
---|---|
|
Преобразует все небезопасные символы в соответствующие escape-последовательности в строке пути, на которую указывает член lpszUrlPath , а в lpszExtraInfo — в строку дополнительных сведений, на которую указывает член структуры URL_COMPONENTS , на которую указывает параметр lpUrlComponents . |
|
Отклоняет URL-адреса в качестве входных данных, содержащих либо имя пользователя, либо пароль, либо и то, и другое. Если функция завершается сбоем из-за недопустимого URL-адреса, последующие вызовы GetLastError будут возвращать ERROR_WINHTTP_INVALID_URL. |
[out] pwszUrl
Указатель на буфер символов, который получает URL-адрес в виде строки расширенных символов (Юникод).
[in, out] pdwUrlLength
Указатель на переменную типа unsigned длинное целое число, которое получает длину буфера pwszUrl в расширенных символах (Юникод). При возврате функции этот параметр получает длину строки URL-адреса в символах минус 1 для завершающего символа. Если GetLastError возвращает ERROR_INSUFFICIENT_BUFFER, этот параметр получает количество расширенных символов, необходимых для хранения созданного URL-адреса.
Возвращаемое значение
Возвращает значение TRUE , если функция выполнена успешно, или false в противном случае. Чтобы получить расширенные данные об ошибках, вызовите Метод GetLastError. Среди возвращаемых кодов ошибок приведены следующие.
Код ошибки | Описание |
---|---|
|
Внутренняя ошибка. |
|
Недостаточно доступной памяти для выполнения запрошенной операции. (Код ошибки Windows) |
Комментарии
Даже если WinHTTP используется в асинхронном режиме, то есть если в WinHttpOpen задано WINHTTP_FLAG_ASYNC, эта функция работает синхронно. Возвращаемое значение указывает на успех или сбой. Чтобы получить расширенные данные об ошибках, вызовите Метод GetLastError.
Примеры
В следующем примере показано, как декомпилировать или взломать 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 Профессиональная с пакетом обновления 3 (SP3) [только классические приложения] |
Минимальная версия сервера | Windows Server 2003, Windows 2000 Server с пакетом обновления 3 (SP3) [только классические приложения] |
Целевая платформа | Windows |
Header | winhttp.h |
Библиотека | Winhttp.lib |
DLL | Winhttp.dll |
Распространяемые компоненты | WinHTTP 5.0 и Internet Обозреватель 5.01 или более поздней версии в Windows XP и Windows 2000. |
См. также раздел
Сведения о службах HTTP Microsoft Windows (WinHTTP)