WINHTTP_STATUS_CALLBACK funzione di callback (winhttp.h)

Il tipo WINHTTP_STATUS_CALLBACK rappresenta una funzione di callback di stato definita dall'applicazione.

Sintassi

WINHTTP_STATUS_CALLBACK WinhttpStatusCallback;

void WinhttpStatusCallback(
  [in] HINTERNET hInternet,
  [in] DWORD_PTR dwContext,
  [in] DWORD dwInternetStatus,
  [in] LPVOID lpvStatusInformation,
  [in] DWORD dwStatusInformationLength
)
{...}

Parametri

[in] hInternet

Handle per il quale viene chiamata la funzione di callback.

[in] dwContext

Puntatore a un DWORD che specifica il valore di contesto definito dall'applicazione associato all'handle nel parametro hInternet .

Un valore di contesto può essere assegnato a un handle di sessione, connessione o richiesta chiamando WinHttpSetOption con l'opzione WINHTTP_OPTION_CONTEXT_VALUE . In alternativa, WinHttpSendRequest può essere usato per associare un valore di contesto a un handle di richiesta.

[in] dwInternetStatus

Punta a un DWORD che specifica il codice di stato che indica il motivo per cui viene chiamata la funzione di callback. I valori possibili sono i seguenti:

WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION

Chiusura della connessione al server. Il parametro lpvStatusInformation è NULL.

WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER

Connessione riuscita al server. Il parametro lpvStatusInformation contiene un puntatore a un LPWSTR che indica l'indirizzo IP del server nella notazione tratteggiata.

WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER

Connessione al server. Il parametro lpvStatusInformation contiene un puntatore a un LPWSTR che indica l'indirizzo IP del server nella notazione tratteggiata.

WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED

La connessione al server è stata chiusa correttamente. Il parametro lpvStatusInformation è NULL.

WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE

I dati sono disponibili per il recupero con WinHttpReadData. Il parametro lpvStatusInformation punta a un DWORD contenente il numero di byte di dati disponibili. Il parametro dwStatusInformationLength stesso è 4 (la dimensione di un DWORD).

WINHTTP_CALLBACK_STATUS_HANDLE_CREATED

È stato creato un handle DI RETE. Il parametro lpvStatusInformation contiene un puntatore all'handle DELLANET.

WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING

Questo valore di handle è stato terminato. Il parametro lpvStatusInformation contiene un puntatore all'handle DELLANET. Non ci saranno più callback per questo handle.

WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE

L'intestazione della risposta è stata ricevuta ed è disponibile con WinHttpQueryHeaders. Il parametro lpvStatusInformation è NULL.

WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE

Ricevuto un messaggio di codice di stato intermedio (livello 100) dal server. Il parametro lpvStatusInformation contiene un puntatore a un DWORD che indica il codice di stato.

WINHTTP_CALLBACK_STATUS_NAME_RESOLVED

È stato trovato l'indirizzo IP del server. Il parametro lpvStatusInformation contiene un puntatore a un LPWSTR che indica il nome risolto.

WINHTTP_CALLBACK_STATUS_READ_COMPLETE

I dati sono stati letti correttamente dal server. Il parametro lpvStatusInformation contiene un puntatore al buffer specificato nella chiamata a WinHttpReadData. Il parametro dwStatusInformationLength contiene il numero di byte letti.

Se usato da WinHttpWebSocketReceive, il parametro lpvStatusInformation contiene un puntatore a una struttura WINHTTP_WEB_SOCKET_STATUS e il parametro dwStatusInformationLength indica le dimensioni di lpvStatusInformation.

WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE

In attesa che il server risponda a una richiesta. Il parametro lpvStatusInformation è NULL.

WINHTTP_CALLBACK_STATUS_REDIRECT

Una richiesta HTTP sta per reindirizzare automaticamente la richiesta. Il parametro lpvStatusInformation contiene un puntatore a un LPWSTR che indica il nuovo URL. A questo punto, l'applicazione può leggere tutti i dati restituiti dal server con la risposta di reindirizzamento e può eseguire query sulle intestazioni di risposta. Può anche annullare l'operazione chiudendo l'handle.

WINHTTP_CALLBACK_STATUS_REQUEST_ERROR

Errore durante l'invio di una richiesta HTTP. Il parametro lpvStatusInformation contiene un puntatore a una struttura WINHTTP_ASYNC_RESULT . Il membro dwResult indica l'ID della funzione chiamata e dwError indica il valore restituito.

WINHTTP_CALLBACK_STATUS_REQUEST_SENT

La richiesta di informazioni è stata inviata correttamente al server. Il parametro lpvStatusInformation contiene un puntatore a un DWORD che indica il numero di byte inviati.

WINHTTP_CALLBACK_STATUS_RESOLVING_NAME

Ricerca dell'indirizzo IP di un nome server. Il parametro lpvStatusInformation contiene un puntatore al nome del server da risolvere.

WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED

È stata ricevuta una risposta dal server. Il parametro lpvStatusInformation contiene un puntatore a un DWORD che indica il numero di byte ricevuti.

WINHTTP_CALLBACK_STATUS_SECURE_FAILURE

Si sono verificati uno o più errori durante la creazione di una connessione sicura (HTTPS) al server. Il parametro lpvStatusInformation contiene un puntatore a un DWORD che è una combinazione bit per bit OR di valori di errore. Per altre informazioni, vedere la descrizione per lpvStatusInformation.

WINHTTP_CALLBACK_STATUS_SENDING_REQUEST

Invio della richiesta di informazioni al server. Il parametro lpvStatusInformation è NULL.

WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE

La richiesta è stata completata correttamente. Il parametro lpvStatusInformation è il valore lpOptional passato a WinHttpSendRequest (il corpo della richiesta iniziale) e il parametro dwStatusInformationLength indica il numero di tali byte iniziali del corpo scritti correttamente (il valore dwOptionalLength passato a WinHttpSendRequest).

WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE

I dati sono stati scritti correttamente nel server. Il parametro lpvStatusInformation contiene un puntatore a un DWORD che indica il numero di byte scritti.

Se usato da WinHttpWebSocketSend, il parametro lpvStatusInformation contiene un puntatore a una struttura WINHTTP_WEB_SOCKET_STATUS e il parametro dwStatusInformationLength indica le dimensioni di lpvStatusInformation.

WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE

L'operazione avviata da una chiamata a WinHttpGetProxyForUrlEx è stata completata. I dati sono disponibili per il recupero con WinHttpReadData.

WINHTTP_CALLBACK_STATUS_CLOSE_COMPLETE

La connessione è stata chiusa correttamente tramite una chiamata a WinHttpWebSocketClose. Il parametro lpvStatusInformation è NULL.

WINHTTP_CALLBACK_STATUS_SHUTDOWN_COMPLETE

La connessione è stata arrestata correttamente tramite una chiamata a WinHttpWebSocketShutdown. Il parametro lpvStatusInformation è NULL.

[in] lpvStatusInformation

Puntatore a un buffer che specifica le informazioni pertinenti a questa chiamata alla funzione di callback. Il formato di questi dati dipende dal valore dell'argomento dwInternetStatus . Per altre informazioni, vedere dwInternetStatus.

Se l'argomento dwInternetStatus è WINHTTP_CALLBACK_STATUS_SECURE_FAILURE, lpvStatusInformation punta a una combinazione DWORD bit per bit di uno o più dei valori seguenti.

Valore Significato
WINHTTP_CALLBACK_STATUS_FLAG_CERT_REV_FAILED
Il controllo delle revoche di certificazione è stato abilitato, ma il controllo di revoca non è riuscito a verificare se un certificato è stato revocato. Il server usato per verificare la presenza di revoche potrebbe non essere raggiungibile.
WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CERT
Certificato SSL non valido.
WINHTTP_CALLBACK_STATUS_FLAG_CERT_REVOKED
Il certificato SSL è stato revocato.
WINHTTP_CALLBACK_STATUS_FLAG_INVALID_CA
La funzione non ha familiarità con l'autorità di certificazione che ha generato il certificato del server.
WINHTTP_CALLBACK_STATUS_FLAG_CERT_CN_INVALID
Il nome comune del certificato SSL (campo nome host) non è corretto, ad esempio se è stato immesso www.microsoft.com e il nome comune nel certificato indica www.msn.com.
WINHTTP_CALLBACK_STATUS_FLAG_CERT_DATE_INVALID
La data del certificato SSL ricevuta dal server non è valida. Il certificato è scaduto.
WINHTTP_CALLBACK_STATUS_FLAG_SECURITY_CHANNEL_ERROR
Si è verificato un errore interno durante il caricamento delle librerie SSL.

[in] dwStatusInformationLength

WINHTTP_CALLBACK_STATUS_REDIRECT callback di stato forniscono un valore dwStatusInformationLength che corrisponde al conteggio dei caratteri dell'LPWSTR a cui punta lpvStatusInformation.

Valore restituito

nessuno

Osservazioni

La funzione di callback deve essere threadsafe e reentrant perché può essere chiamata in un altro thread per una richiesta separata e immessa nuovamente nello stesso thread per la richiesta corrente. Deve quindi essere codificato per gestire la reentrance in modo sicuro durante l'elaborazione. Quando il parametro dwInternetStatus è uguale a WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, il callback non deve essere in grado di gestire la reentrance per la stessa richiesta, perché questo callback è garantito essere l'ultimo e non si verifica quando vengono gestiti altri messaggi per questa richiesta.

La funzione di callback di stato riceve aggiornamenti sullo stato delle operazioni asincrone tramite flag di notifica. Le notifiche che indicano che una determinata operazione è stata completata sono chiamate notifiche di completamento o semplicemente completamenti. Nella tabella seguente sono elencati i sei flag di completamento e la funzione corrispondente che viene completata al momento della ricezione di questo flag.

Flag di completamento Funzione
WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE WinHttpQueryDataAvailable
WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE WinHttpReceiveResponse
WINHTTP_CALLBACK_STATUS_READ_COMPLETE WinHttpReadData
WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE WinHttpSendRequest
WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE WinHttpWriteData
WINHTTP_CALLBACK_STATUS_REQUEST_ERROR Una delle funzioni precedenti quando si verifica un errore.
 

Poiché i callback vengono eseguiti durante l'elaborazione della richiesta, l'applicazione deve dedicare il minor tempo possibile alla funzione di callback per evitare di ridurre la velocità effettiva dei dati nella rete. Ad esempio, la visualizzazione di una finestra di dialogo in una funzione di callback può essere un'operazione di lunga durata che il server termina la richiesta.

La funzione di callback può essere chiamata in un contesto di thread diverso dal thread che ha avviato la richiesta.

Analogamente, non esiste affinità di thread di callback quando chiami WinHttp in modo asincrono: una chiamata potrebbe iniziare da un thread, ma qualsiasi altro thread può ricevere il callback.

Nota Per altre informazioni sull'implementazione in Windows XP e Windows 2000, vedere Requisiti di runtime.
 

Requisiti

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 Windows
Intestazione winhttp.h
Componente ridistribuibile WinHTTP 5.0 e Internet Explorer 5.01 o versione successiva in Windows XP e Windows 2000.

Vedi anche

Versioni di WinHTTP

WinHttpSetStatusCallback