Funzione WinHttpConnect (winhttp.h)
La funzione WinHttpConnect
Sintassi
WINHTTPAPI HINTERNET WinHttpConnect(
[in] HINTERNET hSession,
[in] LPCWSTR pswzServerName,
[in] INTERNET_PORT nServerPort,
[in] DWORD dwReserved
);
Parametri
[in] hSession
Valido
[in] pswzServerName
Puntatore a un nullstringa con terminazione contenente il nome host di un server HTTP. In alternativa, la stringa può contenere l'indirizzo IP del sito come stringa, ad esempio 10.0.1.45. Si noti che WinHttp non accetta nomi host internazionali senza convertirli prima in Punycode. Per altre informazioni, vedere Gestione dei nomi di dominio internazionali (IDN).
[in] nServerPort
Intero senza segno che specifica la porta TCP/IP nel server a cui viene stabilita una connessione. Questo parametro può essere qualsiasi numero di porta TCP/IP valido o uno dei valori seguenti.
Valore | Significato |
---|---|
|
Usa la porta predefinita per i server HTTP (porta 80). |
|
Usa la porta predefinita per i server HTTPS (porta 443). La selezione di questa porta non stabilisce automaticamente una connessione sicura. È comunque necessario specificare l'uso della semantica delle transazioni sicure usando il flag WINHTTP_FLAG_SECURE con WinHttpOpenRequest. |
|
Usa la porta 80 per HTTP e la porta 443 per Secure Hypertext Transfer Protocol (HTTPS). |
[in] dwReserved
Questo parametro è riservato e deve essere 0.
Valore restituito
Restituisce un handle di connessione valido alla sessione HTTP se la connessione ha esito positivo oppure null in caso contrario. Per recuperare informazioni sull'errore estese, chiamare GetLastError. Tra i codici di errore restituiti sono riportati di seguito.
Codici di errore | Descrizione |
---|---|
|
Il tipo di handle fornito non è corretto per questa operazione. |
|
Si è verificato un errore interno. |
|
L'URL non è valido. |
|
L'operazione è stata annullata, in genere perché l'handle in cui la richiesta era operativa è stata chiusa prima del completamento dell'operazione. |
|
Non è stato possibile riconoscere lo schema URL o non è supportato. |
|
Il supporto della funzione WinHTTP viene arrestato o scaricato. |
|
Memoria insufficiente per completare l'operazione richiesta. (Codice errore di Windows) |
Osservazioni
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 informazioni estese sull'errore, chiamare GetLastError.
Al termine dell'utilizzo dell'applicazione chiamante, l'handle di
WinHttpConnect specifica il server HTTP di destinazione, tuttavia una risposta può provenire da un altro server se la richiesta è stata reindirizzata. È possibile determinare l'URL del server che invia la risposta chiamando WinHttpQueryOption con il flag WINHTTP_OPTION_URL.
Esempi
L'esempio seguente illustra come usare la semantica delle transazioni sicura per scaricare una risorsa da un server HTTPS. Il codice di esempio inizializza l'API (Application Programming Interface) di Microsoft Windows HTTP Services (WinHTTP), seleziona un server HTTPS di destinazione, quindi apre e invia una richiesta per questa risorsa protetta.
WinHttpQueryDataAvailable viene usato con l'handle di richiesta per determinare la quantità di dati disponibili per il download, quindi viene usato WinHttpReadData per leggere tali dati. Questo processo viene ripetuto fino a quando non viene recuperato e visualizzato l'intero documento.
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);
Fabbisogno
Requisito | Valore |
---|---|
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 | Finestre |
intestazione |
winhttp.h |
libreria |
Winhttp.lib |
dll | Winhttp.dll |
Ridistribuibile | WinHTTP 5.0 e Internet Explorer 5.01 o versione successiva in Windows XP e Windows 2000. |
Vedere anche
Informazioni sui servizi HTTP Di Microsoft Windows (WinHTTP)