Partager via


WinHttpCreateUrl, fonction (winhttp.h)

La fonction WinHttpCreateUrl crée une URL à partir de composants tels que le nom d’hôte et le chemin d’accès.

Syntaxe

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

Paramètres

[in] lpUrlComponents

Pointeur vers une structure URL_COMPONENTS qui contient les composants à partir desquels créer l’URL.

[in] dwFlags

Indicateurs qui contrôlent le fonctionnement de cette fonction. Ce paramètre peut prendre les valeurs suivantes.

Valeur Signification
ICU_ESCAPE
Convertit tous les caractères non sécurisés en séquences d’échappement correspondantes dans la chaîne de chemin vers laquelle pointe le membre lpszUrlPath et, dans lpszExtraInfo , la chaîne d’informations supplémentaires pointée par le membre de la structure URL_COMPONENTS pointée par le paramètre lpUrlComponents .
ICU_REJECT_USERPWD
Rejette les URL en tant qu’entrée qui contient un nom d’utilisateur ou un mot de passe, ou les deux. Si la fonction échoue en raison d’une URL non valide, les appels suivants à GetLastError retournent ERROR_WINHTTP_INVALID_URL.

[out] pwszUrl

Pointeur vers une mémoire tampon de caractères qui reçoit l’URL sous la forme d’une chaîne de caractères larges (Unicode).

[in, out] pdwUrlLength

Pointeur vers une variable de type entier long non signé qui reçoit la longueur de la mémoire tampon pwszUrl en caractères larges (Unicode). Lorsque la fonction retourne, ce paramètre reçoit la longueur de la chaîne d’URL large en caractères, moins 1 pour le caractère de fin. Si GetLastError retourne ERROR_INSUFFICIENT_BUFFER, ce paramètre reçoit le nombre de caractères larges requis pour contenir l’URL créée.

Valeur retournée

Retourne TRUE si la fonction réussit, ou FALSE dans le cas contraire. Pour obtenir des données d’erreur étendues, appelez GetLastError. Parmi les codes d’erreur retournés figurent les suivants.

Code d'erreur Description
ERROR_WINHTTP_INTERNAL_ERROR
Une erreur interne s’est produite.
ERROR_NOT_ENOUGH_MEMORY
Mémoire insuffisante pour terminer l’opération demandée. (Code d’erreur Windows)

Remarques

Même lorsque WinHTTP est utilisé en mode asynchrone, c’est-à-dire quand WINHTTP_FLAG_ASYNC a été défini dans WinHttpOpen, cette fonction fonctionne de manière synchrone. La valeur de retour indique la réussite ou l’échec. Pour obtenir des données d’erreur étendues, appelez GetLastError.

Note Pour Windows XP et Windows 2000, consultez la section Conditions requises pour l’exécution de la page de démarrage WinHttp.
 

Exemples

L’exemple suivant montre comment décompiler ou cracker une URL dans ses sous-composants, mettre à jour un composant, puis reconstruire 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;
    }

Configuration requise

   
Client minimal pris en charge Windows XP, Windows 2000 Professionnel avec SP3 [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003, Windows 2000 Server avec SP3 [applications de bureau uniquement]
Plateforme cible Windows
En-tête winhttp.h
Bibliothèque Winhttp.lib
DLL Winhttp.dll
Composant redistribuable WinHTTP 5.0 et Internet Explorer 5.01 ou version ultérieure sur Windows XP et Windows 2000.

Voir aussi

À propos des services HTTP Microsoft Windows (WinHTTP)

Gestion des localisateurs de ressources uniformes

WinHTTP Versions

WinHttpCrackUrl