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.
[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.
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. |