Fonction WinHttpConnect (winhttp.h)
La fonction WinHttpConnect
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 null-terminated qui contient le nom d’hôte d’un serveur HTTP. Vous pouvez également contenir l’adresse IP du site sous forme de chaîne, par exemple 10.0.1.45. Notez que WinHttp n’accepte pas les noms d’hôtes internationaux sans les convertir 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 de 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 de retour
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, voici ce qui suit.
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 demande a été fermée 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 arrêtée ou déchargée. |
|
La mémoire n’a pas été suffisante pour terminer l’opération demandée. (Code d’erreur Windows) |
Remarques
Même quand WinHTTP est utilisé en mode asynchrone (autrement dit, lorsque WINHTTP_FLAG_ASYNC a été défini dans WinHttpOpen), cette fonction fonctionne de façon synchrone. La valeur de retour indique la réussite ou l’échec. Pour obtenir des informations d’erreur étendues, appelez GetLastError.
Une fois l’application appelante terminée à l’aide du handle HINTERNET
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 envoyant la réponse en appelant WinHttpQueryOption avec l’indicateur de WINHTTP_OPTION_URL.
Exemples
L’exemple suivant montre comment utiliser la sémantique des transactions sécurisées pour télécharger une ressource à partir d’un serveur HTTPS. L’exemple de code initialise l’interface de programmation d’applications 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 pour le 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);
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Windows XP, Windows 2000 Professionnel avec SP3 [applications de bureau uniquement] |
serveur minimum pris en charge | Windows Server 2003, Windows 2000 Server avec SP3 [applications de bureau uniquement] |
plateforme cible | Windows |
d’en-tête | winhttp.h |
bibliothèque | Winhttp.lib |
DLL | Winhttp.dll |
redistribuable | WinHTTP 5.0 et Internet Explorer 5.01 ou version ultérieure sur Windows XP et Windows 2000. |