Função WinHttpCrackUrl (winhttp.h)
A função WinHttpCrackUrl separa uma URL em suas partes componentes, como nome do host e caminho.
Sintaxe
WINHTTPAPI BOOL WinHttpCrackUrl(
[in] LPCWSTR pwszUrl,
[in] DWORD dwUrlLength,
[in] DWORD dwFlags,
[in, out] LPURL_COMPONENTS lpUrlComponents
);
Parâmetros
[in] pwszUrl
Ponteiro para uma cadeia de caracteres que contém a URL canônica a ser separada. WinHttpCrackUrl não verifica se essa URL tem validade ou formato correto antes de tentar quebrá-la.
[in] dwUrlLength
O comprimento da cadeia de caracteres pwszUrl, em caracteres. Se
[in] dwFlags
Os sinalizadores que controlam a operação. Esse parâmetro pode ser uma combinação de um ou mais dos sinalizadores a seguir (os valores podem ser or'd bit a bit juntos). Ou o parâmetro pode ser 0, que não executa operações especiais.
Valor | Significado |
---|---|
|
Converte caracteres que são "codificados para escape" (%xx) em seu formulário não escapado. Isso não decodifica outras codificações, como UTF-8. Esse recurso só poderá ser usado se o usuário fornecer buffers na estrutura URL_COMPONENTS para a qual copiar os componentes. |
|
Escapa determinados caracteres para suas sequências de escape (%xx). Os caracteres a serem escapados são caracteres não ASCII ou os caracteres ASCII que devem ser escapados para serem representados em uma solicitação HTTP. Esse recurso só poderá ser usado se o usuário fornecer buffers na estrutura URL_COMPONENTS para a qual copiar os componentes. |
|
Rejeita URLs como entrada que contêm credenciais inseridas (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. |
[in, out] lpUrlComponents
Ponteiro para uma estrutura de URL_COMPONENTS que recebe os componentes de URL.
Valor de retorno
Retorna VERDADEIRO se a função for bem-sucedida ou FALSE caso contrário. Para obter informações de erro estendidas, chame GetLastError. Entre os códigos de erro retornados estão os seguintes.
Códigos de erro | Descrição |
---|---|
|
Ocorreu um erro interno. |
|
A URL é inválida. |
|
O esquema de URL não pôde ser reconhecido ou não tem suporte. |
|
Não havia memória suficiente disponível para concluir a operação solicitada. (Código de erro do Windows) |
Observações
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 informações de erro estendidas, chame GetLastError.
Os componentes necessários são indicados por membros da estrutura URL_COMPONENTS. Cada componente tem um ponteiro para o valor e tem um membro que armazena o comprimento do valor armazenado. Se o valor e o comprimento de um componente forem iguais a zero, esse componente não será retornado. Se o ponteiro para o valor do componente for NULL e o valor de seu membro de comprimento correspondente não for zero, o endereço do primeiro caractere do componente correspondente no pwszUrl cadeia de caracteres será armazenado no ponteiro e o comprimento do componente será armazenado no membro de comprimento.
Se o ponteiro contiver o endereço do buffer fornecido pelo usuário, o membro de comprimento deverá conter o tamanho do buffer. A função WinHttpCrackUrl copia o componente para o buffer e o membro de comprimento é definido como o comprimento do componente copiado, menos 1 para o terminador de cadeia de caracteres à direita. Se um buffer fornecido pelo usuário não for grande o suficiente, WinHttpCrackUrl retornará FALSE e GetLastError retornará ERROR_INSUFFICIENT_BUFFER.
Para que WinHttpCrackUrl funcionem corretamente, o tamanho da estrutura de URL_COMPONENTS deve ser armazenado no membro dwStructSize dessa estrutura.
Se o protocolo de Internet da URL passado para pwszUrl não for HTTP ou HTTPS, WinHttpCrackUrl retornará FALSE e GetLastError indicará
ERROR_WINHTTP_UNRECOGNIZED_SCHEME.
WinHttpCrackUrl não verifica a validade ou o formato de uma URL antes de tentar quebrá-la. Como resultado, se uma cadeia de caracteres como ""http://server?Bad=URL"" for passada, a função retornará resultados incorretos.
Exemplos
Este exemplo mostra como dividir uma URL em seus componentes, 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 information.
// New info 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
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Windows XP, Windows 2000 Professional com SP3 [somente aplicativos da área de trabalho] |
servidor com suporte mínimo | Windows Server 2003, Windows 2000 Server com SP3 [somente aplicativos da área de trabalho] |
da Plataforma de Destino |
Windows |
cabeçalho | winhttp.h |
biblioteca | Winhttp.lib |
de DLL |
Winhttp.dll |
redistribuível | WinHTTP 5.0 e Internet Explorer 5.01 ou posterior no Windows XP e Windows 2000. |
Consulte também
sobre o WinHTTP (Microsoft Windows HTTP Services)
tratando de recursos uniformes