Compartir a través de


Función WinHttpCreateUrl (winhttp.h)

La función WinHttpCreateUrl crea una dirección URL a partir de partes de componentes, como el nombre de host y la ruta de acceso.

Sintaxis

WINHTTPAPI BOOL WinHttpCreateUrl(
  [in]      LPURL_COMPONENTS lpUrlComponents,
  [in]      DWORD            dwFlags,
  [out]     LPWSTR           pwszUrl,
  [in, out] LPDWORD          pdwUrlLength
);

Parámetros

[in] lpUrlComponents

Puntero a una estructura de URL_COMPONENTS que contiene los componentes de los que se va a crear la dirección URL.

[in] dwFlags

Marcas que controlan la operación de esta función. Este parámetro puede ser uno de los valores siguientes.

Valor Significado
ICU_ESCAPE
Convierte todos los caracteres no seguros en sus secuencias de escape correspondientes en la cadena de ruta de acceso a la que apunta el miembro lpszUrlPath y en lpszExtraInfo la cadena de información adicional a la que apunta el miembro de la estructura URL_COMPONENTS a la que apunta el parámetro lpUrlComponents .
ICU_REJECT_USERPWD
Rechaza las direcciones URL como entrada que contiene un nombre de usuario, una contraseña o ambas. Si se produce un error en la función debido a una dirección URL no válida, las llamadas posteriores a GetLastError devolverán ERROR_WINHTTP_INVALID_URL.

[out] pwszUrl

Puntero a un búfer de caracteres que recibe la dirección URL como una cadena de caracteres anchos (Unicode).

[in, out] pdwUrlLength

Puntero a una variable de tipo entero largo sin signo que recibe la longitud del búfer pwszUrl en caracteres anchos (Unicode). Cuando se devuelve la función, este parámetro recibe la longitud de la cadena de dirección URL ancha en caracteres, menos 1 para el carácter de terminación. Si GetLastError devuelve ERROR_INSUFFICIENT_BUFFER, este parámetro recibe el número de caracteres anchos necesarios para contener la dirección URL creada.

Valor devuelto

Devuelve TRUE si la función se realiza correctamente o FALSE en caso contrario. Para obtener datos de error extendidos, llame a GetLastError. Entre los códigos de error devueltos se encuentran los siguientes.

Código de error Descripción
ERROR_WINHTTP_INTERNAL_ERROR
Se ha producido un error interno.
ERROR_NOT_ENOUGH_MEMORY
Memoria insuficiente disponible para completar la operación solicitada. (Código de error de Windows)

Comentarios

Incluso cuando WinHTTP se usa en modo asincrónico, es decir, cuando WINHTTP_FLAG_ASYNC se ha establecido en WinHttpOpen, esta función funciona de forma sincrónica. El valor devuelto indica éxito o error. Para obtener datos de error extendidos, llame a GetLastError.

Nota Para Windows XP y Windows 2000, consulta la sección Requisitos en tiempo de ejecución de la página de inicio de WinHttp.
 

Ejemplos

En el ejemplo siguiente se muestra cómo descompilar, o descifrar, una dirección URL en sus subcomponentes, actualizar un componente y, a continuación, reconstruir la dirección 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 compatible Windows XP, Windows 2000 Professional con SP3 [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003, Windows 2000 Server con SP3 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado winhttp.h
Library Winhttp.lib
Archivo DLL Winhttp.dll
Redistribuible WinHTTP 5.0 e Internet Explorer 5.01 o posterior en Windows XP y Windows 2000.

Consulte también

Acerca de los servicios HTTP de Microsoft Windows (WinHTTP)

Control de localizadores uniformes de recursos

Versiones de WinHTTP

WinHttpCrackUrl