Funzione WinHttpCreateUrl (winhttp.h)

La funzione WinHttpCreateUrl crea un URL da parti del componente, ad esempio il nome host e il percorso.

Sintassi

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

Parametri

[in] lpUrlComponents

Puntatore a una struttura URL_COMPONENTS che contiene i componenti da cui creare l'URL.

[in] dwFlags

Flag che controllano l'operazione di questa funzione. Questo parametro può avere uno dei valori seguenti.

Valore Significato
ICU_ESCAPE
Converte tutti i caratteri non sicuri nelle sequenze di escape corrispondenti nella stringa di percorso a cui punta il membro lpszUrlPath e in lpszExtraInfo la stringa di informazioni aggiuntive a cui punta il membro della struttura URL_COMPONENTS a cui punta il parametro lpUrlComponents .
ICU_REJECT_USERPWD
Rifiuta gli URL come input che contengono un nome utente o una password o entrambi. Se la funzione ha esito negativo a causa di un URL non valido, le chiamate successive a GetLastError restituiranno ERROR_WINHTTP_INVALID_URL.

[out] pwszUrl

Puntatore a un buffer di caratteri che riceve l'URL come stringa di caratteri wide (Unicode).

[in, out] pdwUrlLength

Puntatore a una variabile di tipo unsigned long integer che riceve la lunghezza del buffer pwszUrl in caratteri Wide (Unicode). Quando la funzione viene restituita, questo parametro riceve la lunghezza della stringa URL larga in caratteri, meno 1 per il carattere di terminazione. Se GetLastError restituisce ERROR_INSUFFICIENT_BUFFER, questo parametro riceve il numero di caratteri wide necessari per contenere l'URL creato.

Valore restituito

Restituisce TRUE se la funzione ha esito positivo o FALSE in caso contrario. Per ottenere dati di errore estesi, chiamare GetLastError. Tra i codici di errore restituiti sono riportati di seguito.

Codice di errore Descrizione
ERROR_WINHTTP_INTERNAL_ERROR
An internal error occurred.
ERROR_NOT_ENOUGH_MEMORY
Memoria insufficiente disponibile per completare l'operazione richiesta. (Codice errore di Windows)

Commenti

Anche quando WinHTTP viene usato in modalità asincrona, ovvero quando WINHTTP_FLAG_ASYNC è stato impostato in WinHttpOpen, questa funzione funziona in modo sincrono. Il valore restituito indica l'esito positivo o negativo. Per ottenere dati di errore estesi, chiamare GetLastError.

Nota Per Windows XP e Windows 2000, vedere la sezione Requisiti di runtime della pagina iniziale di WinHttp.
 

Esempio

Nell'esempio seguente viene illustrato come decompilare o comprimere un URL nei relativi sottocomponenti, aggiornare un componente e quindi ricostruire l'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;
    }

Requisiti

   
Client minimo supportato Windows XP, Windows 2000 Professional con SP3 [solo app desktop]
Server minimo supportato Windows Server 2003, Windows 2000 Server con SP3 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione winhttp.h
Libreria Winhttp.lib
DLL Winhttp.dll
Componente ridistribuibile WinHTTP 5.0 e Internet Explorer 5.01 o versione successiva in Windows XP e Windows 2000.

Vedi anche

Informazioni sui servizi HTTP di Microsoft Windows (WinHTTP)

Gestione di localizzatori di risorse uniformi

Versioni di WinHTTP

WinHttpCrackUrl