WinHttpConnect, fonction (winhttp.h)
La fonction WinHttpConnect spécifie le serveur cible initial d’une requête HTTP et retourne un handle de connexion HINTERNET à une session HTTP pour cette cible initiale.
Syntaxe
WINHTTPAPI HINTERNET WinHttpConnect(
[in] HINTERNET hSession,
[in] LPCWSTR pswzServerName,
[in] INTERNET_PORT nServerPort,
[in] DWORD dwReserved
);
Paramètres
[in] hSession
Handle de session WINHTTP HINTERNET valide retourné par un appel précédent à WinHttpOpen.
[in] pswzServerName
Pointeur vers une chaîne terminée par null qui contient le nom d’hôte d’un serveur HTTP. La chaîne peut également contenir l’adresse IP du site en ASCII, par exemple, 10.0.1.45. Notez que WinHttp n’accepte pas les noms d’hôtes internationaux sans les convertir d’abord en Punycode. Pour plus d’informations, consultez Gestion des noms de domaine internationalisés (IDN).
[in] nServerPort
Entier non signé qui spécifie le port TCP/IP sur le serveur auquel une connexion est établie. Ce paramètre peut être n’importe quel numéro de port TCP/IP valide ou l’une des valeurs suivantes.
Valeur | Signification |
---|---|
|
Utilise le port par défaut pour les serveurs HTTP (port 80). |
|
Utilise le port par défaut pour les serveurs HTTPS (port 443). La sélection de ce port n’établit pas automatiquement une connexion sécurisée. Vous devez toujours spécifier l’utilisation de la sémantique de transaction sécurisée à l’aide de l’indicateur WINHTTP_FLAG_SECURE avec WinHttpOpenRequest. |
|
Utilise le port 80 pour HTTP et le port 443 pour le protocole HTTPS (Secure Hypertext Transfer Protocol). |
[in] dwReserved
Ce paramètre est réservé et doit être 0.
Valeur retournée
Retourne un handle de connexion valide à la session HTTP si la connexion réussit, ou NULL dans le cas contraire. Pour récupérer des informations d’erreur étendues, appelez GetLastError. Parmi les codes d’erreur retournés figurent les suivants.
Codes d’erreur | Description |
---|---|
|
Le type de handle fourni est incorrect pour cette opération. |
|
Une erreur interne s'est produite. |
|
L’URL n’est pas valide. |
|
L’opération a été annulée, généralement parce que le handle sur lequel la requête fonctionnait a été fermé avant la fin de l’opération. |
|
Le schéma d’URL n’a pas pu être reconnu ou n’est pas pris en charge. |
|
La prise en charge de la fonction WinHTTP est en cours d’arrêt ou de déchargement. |
|
La mémoire disponible était insuffisante pour terminer l’opération demandée. (Code d’erreur Windows) |
Remarques
Même lorsque WinHTTP est utilisé en mode asynchrone (autrement dit, 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 informations détaillées sur l’erreur, appelez GetLastError.
Une fois que l’application appelante a terminé d’utiliser le handle HINTERNET retourné par WinHttpConnect, elle doit être fermée à l’aide de la fonction WinHttpCloseHandle .
WinHttpConnect spécifie le serveur HTTP cible, mais une réponse peut provenir d’un autre serveur si la requête a été redirigée. Vous pouvez déterminer l’URL du serveur qui envoie la réponse en appelant WinHttpQueryOption avec l’indicateur WINHTTP_OPTION_URL.
Exemples
L’exemple suivant montre comment utiliser la sémantique de transaction sécurisée pour télécharger une ressource à partir d’un serveur HTTPS. L’exemple de code initialise l’interface de programmation d’applications (API) microsoft Windows HTTP Services (WinHTTP), sélectionne un serveur HTTPS cible, puis ouvre et envoie une demande pour cette ressource sécurisée.
WinHttpQueryDataAvailable est utilisé avec le handle de requête pour déterminer la quantité de données disponibles en téléchargement, puis WinHttpReadData est utilisé pour lire ces données. Ce processus se répète jusqu’à ce que l’intégralité du document ait été récupérée et affichée.
DWORD dwSize = 0;
DWORD dwDownloaded = 0;
LPSTR pszOutBuffer;
BOOL bResults = FALSE;
HINTERNET hSession = NULL,
hConnect = NULL,
hRequest = NULL;
// Use WinHttpOpen to obtain a session handle.
hSession = WinHttpOpen( L"WinHTTP Example/1.0",
WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
WINHTTP_NO_PROXY_NAME,
WINHTTP_NO_PROXY_BYPASS, 0);
// Specify an HTTP server.
if (hSession)
hConnect = WinHttpConnect( hSession, L"www.microsoft.com",
INTERNET_DEFAULT_HTTPS_PORT, 0);
// Create an HTTP request handle.
if (hConnect)
hRequest = WinHttpOpenRequest( hConnect, L"GET", NULL,
NULL, WINHTTP_NO_REFERER,
WINHTTP_DEFAULT_ACCEPT_TYPES,
WINHTTP_FLAG_SECURE);
// Send a request.
if (hRequest)
bResults = WinHttpSendRequest( hRequest,
WINHTTP_NO_ADDITIONAL_HEADERS,
0, WINHTTP_NO_REQUEST_DATA, 0,
0, 0);
// End the request.
if (bResults)
bResults = WinHttpReceiveResponse( hRequest, NULL);
// Keep checking for data until there is nothing left.
if (bResults)
do
{
// Check for available data.
dwSize = 0;
if (!WinHttpQueryDataAvailable( hRequest, &dwSize))
printf("Error %u in WinHttpQueryDataAvailable.\n", GetLastError());
// Allocate space for the buffer.
pszOutBuffer = new char[dwSize+1];
if (!pszOutBuffer)
{
printf("Out of memory\n");
dwSize=0;
}
else
{
// Read the Data.
ZeroMemory(pszOutBuffer, dwSize+1);
if (!WinHttpReadData( hRequest, (LPVOID)pszOutBuffer,
dwSize, &dwDownloaded))
printf( "Error %u in WinHttpReadData.\n", GetLastError());
else
printf( "%s\n", pszOutBuffer);
// Free the memory allocated to the buffer.
delete [] pszOutBuffer;
}
} while (dwSize > 0);
// Report any errors.
if (!bResults)
printf("Error %d has occurred.\n", GetLastError());
// Close any open handles.
if (hRequest) WinHttpCloseHandle(hRequest);
if (hConnect) WinHttpCloseHandle(hConnect);
if (hSession) WinHttpCloseHandle(hSession);
Configuration requise
Condition requise | Valeur |
---|---|
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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour