Função WinHttpCreateUrl (winhttp.h)
A função WinHttpCreateUrl cria uma URL de partes do componente, como o nome e o caminho do host.
Sintaxe
WINHTTPAPI BOOL WinHttpCreateUrl(
[in] LPURL_COMPONENTS lpUrlComponents,
[in] DWORD dwFlags,
[out] LPWSTR pwszUrl,
[in, out] LPDWORD pdwUrlLength
);
Parâmetros
[in] lpUrlComponents
Ponteiro para uma estrutura URL_COMPONENTS que contém os componentes dos quais criar a URL.
[in] dwFlags
Sinalizadores que controlam a operação dessa função. Esse parâmetro pode usar um dos valores a seguir.
Valor | Significado |
---|---|
|
Converte todos os caracteres não seguros em suas sequências de escape correspondentes na cadeia de caracteres de caminho apontada pelo membro lpszUrlPath e em lpszExtraInfo a cadeia de caracteres de informações extras apontada pelo membro da estrutura URL_COMPONENTS apontada pelo parâmetro lpUrlComponents . |
|
Rejeita URLs como entrada que contém um nome de usuário, uma senha ou ambos. Se a função falhar devido a uma URL inválida, as chamadas subsequentes para GetLastError retornarão ERROR_WINHTTP_INVALID_URL. |
[out] pwszUrl
Ponteiro para um buffer de caracteres que recebe a URL como uma cadeia de caracteres largos (Unicode).
[in, out] pdwUrlLength
Ponteiro para uma variável do tipo inteiro longo sem sinal que recebe o comprimento do buffer pwszUrl em caracteres largos (Unicode). Quando a função retorna, esse parâmetro recebe o comprimento da cadeia de caracteres de URL larga em caracteres, menos 1 para o caractere de terminação. Se GetLastError retornar ERROR_INSUFFICIENT_BUFFER, esse parâmetro receberá o número de caracteres largos necessários para manter a URL criada.
Valor retornado
Retornará TRUE se a função for bem-sucedida ou FALSE caso contrário. Para obter dados de erro estendidos, chame GetLastError. Entre os códigos de erro retornados estão os seguintes.
Código do Erro | Descrição |
---|---|
|
Ocorreu um erro interno. |
|
Memória insuficiente disponível para concluir a operação solicitada. (Código de erro do Windows) |
Comentários
Mesmo quando WinHTTP é usado no modo assíncrono, ou seja, quando WINHTTP_FLAG_ASYNC foi definido em WinHttpOpen, essa função opera de forma síncrona. O valor retornado indica êxito ou falha. Para obter dados de erro estendidos, chame GetLastError.
Exemplos
O exemplo a seguir mostra como descompilar ou quebrar uma URL em seus subcomponentes, atualizar um componente e reconstruir a 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;
}
Requisitos
Cliente mínimo com suporte | Windows XP, Windows 2000 Professional com SP3 [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2003, Windows 2000 Server com SP3 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | winhttp.h |
Biblioteca | Winhttp.lib |
DLL | Winhttp.dll |
Redistribuível | WinHTTP 5.0 e Internet Explorer 5.01 ou posterior no Windows XP e Windows 2000. |
Confira também
Sobre os Serviços HTTP do Microsoft Windows (WinHTTP)