WINHTTP_STATUS_CALLBACK função de retorno de chamada (winhttp.h)
O tipo WINHTTP_STATUS_CALLBACK representa uma função de retorno de chamada de status definida pelo aplicativo.
Sintaxe
WINHTTP_STATUS_CALLBACK WinhttpStatusCallback;
void WinhttpStatusCallback(
[in] HINTERNET hInternet,
[in] DWORD_PTR dwContext,
[in] DWORD dwInternetStatus,
[in] LPVOID lpvStatusInformation,
[in] DWORD dwStatusInformationLength
)
{...}
Parâmetros
[in] hInternet
O identificador para o qual a função de retorno de chamada é chamada.
[in] dwContext
Um ponteiro para um DWORD que especifica o valor de contexto definido pelo aplicativo associado ao identificador no parâmetro hInternet .
Um valor de contexto pode ser atribuído a um identificador de Sessão, Conexão ou Solicitação chamando WinHttpSetOption com a opção WINHTTP_OPTION_CONTEXT_VALUE . Como alternativa, WinHttpSendRequest pode ser usado para associar um valor de contexto a um identificador de solicitação.
[in] dwInternetStatus
Aponta para um DWORD que especifica o código de status que indica por que a função de retorno de chamada é chamada. Esse valor pode ser um dos seguintes:
WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION
Encerrando a conexão com o servidor. O parâmetro lpvStatusInformation é NULL.
WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER
Conectado com êxito ao servidor. O parâmetro lpvStatusInformation contém um ponteiro para um LPWSTR que indica o endereço IP do servidor na notação pontilhada.
WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER
Conectando-se ao servidor. O parâmetro lpvStatusInformation contém um ponteiro para um LPWSTR que indica o endereço IP do servidor na notação pontilhada.
WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED
Fechou com êxito a conexão com o servidor. O parâmetro lpvStatusInformation é NULL.
WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE
Os dados estão disponíveis para serem recuperados com WinHttpReadData. O parâmetro lpvStatusInformation aponta para um DWORD que contém o número de bytes de dados disponíveis. O parâmetro dwStatusInformationLength em si é 4 (o tamanho de um DWORD).
WINHTTP_CALLBACK_STATUS_HANDLE_CREATED
Um identificador HINTERNET foi criado. O parâmetro lpvStatusInformation contém um ponteiro para o identificador HINTERNET .
WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING
Esse valor de identificador foi encerrado. O parâmetro lpvStatusInformation contém um ponteiro para o identificador HINTERNET . Não haverá mais retornos de chamada para esse identificador.
WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE
O cabeçalho de resposta foi recebido e está disponível com WinHttpQueryHeaders. O parâmetro lpvStatusInformation é NULL.
WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE
Recebeu uma mensagem de código de status intermediário (nível 100) do servidor. O parâmetro lpvStatusInformation contém um ponteiro para um DWORD que indica o código de status.
WINHTTP_CALLBACK_STATUS_NAME_RESOLVED
O endereço IP do servidor foi encontrado com êxito. O parâmetro lpvStatusInformation contém um ponteiro para um LPWSTR que indica o nome que foi resolvido.
WINHTTP_CALLBACK_STATUS_READ_COMPLETE
Os dados foram lidos com êxito do servidor. O parâmetro lpvStatusInformation contém um ponteiro para o buffer especificado na chamada para WinHttpReadData. O parâmetro dwStatusInformationLength contém o número de bytes lidos.
Quando usado por WinHttpWebSocketReceive, o parâmetro lpvStatusInformation contém um ponteiro para uma estrutura WINHTTP_WEB_SOCKET_STATUS e o parâmetro dwStatusInformationLength indica o tamanho de lpvStatusInformation.
WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE
Aguardando o servidor responder a uma solicitação. O parâmetro lpvStatusInformation é NULL.
WINHTTP_CALLBACK_STATUS_REDIRECT
Uma solicitação HTTP está prestes a redirecionar automaticamente a solicitação. O parâmetro lpvStatusInformation contém um ponteiro para um LPWSTR que indica a nova URL. Neste ponto, o aplicativo pode ler todos os dados retornados pelo servidor com a resposta de redirecionamento e pode consultar os cabeçalhos de resposta. Ele também pode cancelar a operação fechando o identificador.
WINHTTP_CALLBACK_STATUS_REQUEST_ERROR
Erro ao enviar uma solicitação HTTP. O parâmetro lpvStatusInformation contém um ponteiro para uma estrutura WINHTTP_ASYNC_RESULT . Seu membro dwResult indica a ID da função chamada e dwError indica o valor retornado.
WINHTTP_CALLBACK_STATUS_REQUEST_SENT
Enviou com êxito a solicitação de informações para o servidor. O parâmetro lpvStatusInformation contém um ponteiro para um DWORD que indica o número de bytes enviados.
WINHTTP_CALLBACK_STATUS_RESOLVING_NAME
Pesquisando o endereço IP de um nome de servidor. O parâmetro lpvStatusInformation contém um ponteiro para o nome do servidor que está sendo resolvido.
WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED
Recebeu com êxito uma resposta do servidor. O parâmetro lpvStatusInformation contém um ponteiro para um DWORD que indica o número de bytes recebidos.
WINHTTP_CALLBACK_STATUS_SECURE_FAILURE
Um ou mais erros foram encontrados ao estabelecer uma conexão HTTPS (Segura) com o servidor. O parâmetro lpvStatusInformation contém um ponteiro para um DWORD que é uma combinação or bit a bit de valores de erro. Para obter mais informações, consulte a descrição de lpvStatusInformation.
WINHTTP_CALLBACK_STATUS_SENDING_REQUEST
Enviando a solicitação de informações para o servidor. O parâmetro lpvStatusInformation é NULL.
WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE
A solicitação foi concluída com êxito. O parâmetro lpvStatusInformation é o valor lpOptional passado para WinHttpSendRequest (o corpo da solicitação inicial) e o parâmetro dwStatusInformationLength indica o número desses bytes iniciais do corpo gravados com êxito (o valor dwOptionalLength passado para WinHttpSendRequest).
WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE
Os dados foram gravados com êxito no servidor. O parâmetro lpvStatusInformation contém um ponteiro para um DWORD que indica o número de bytes gravados.
Quando usado por WinHttpWebSocketSend, o parâmetro lpvStatusInformation contém um ponteiro para uma estrutura WINHTTP_WEB_SOCKET_STATUS e o parâmetro dwStatusInformationLength indica o tamanho de lpvStatusInformation.
WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE
A operação iniciada por uma chamada para WinHttpGetProxyForUrlEx foi concluída. Os dados estão disponíveis para serem recuperados com WinHttpReadData.
WINHTTP_CALLBACK_STATUS_CLOSE_COMPLETE
A conexão foi fechada com êxito por meio de uma chamada para WinHttpWebSocketClose. O parâmetro lpvStatusInformation é NULL.
WINHTTP_CALLBACK_STATUS_SHUTDOWN_COMPLETE
A conexão foi desligada com êxito por meio de uma chamada para WinHttpWebSocketShutdown. O parâmetro lpvStatusInformation é NULL.
[in] lpvStatusInformation
Um ponteiro para um buffer que especifica informações pertinentes a essa chamada para a função de retorno de chamada. O formato desses dados depende do valor do argumento dwInternetStatus . Para obter mais informações, consulte dwInternetStatus.
Se o argumento dwInternetStatus for WINHTTP_CALLBACK_STATUS_SECURE_FAILURE, lpvStatusInformation apontará para um DWORD que é uma combinação or bit a bit de um ou mais dos valores a seguir.
[in] dwStatusInformationLength
WINHTTP_CALLBACK_STATUS_REDIRECT retornos de chamada de status fornecem um valor dwStatusInformationLength que corresponde à contagem de caracteres do LPWSTR apontado por lpvStatusInformation.
Retornar valor
Nenhum
Comentários
A função de retorno de chamada deve ser threadsafe e reentrante porque pode ser chamada em outro thread para uma solicitação separada e reentrada no mesmo thread para a solicitação atual. Portanto, ele deve ser codificado para lidar com a reentrância com segurança durante o processamento. Quando o parâmetro dwInternetStatus é igual a WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, o retorno de chamada não precisa ser capaz de lidar com a reentrância para a mesma solicitação, pois esse retorno de chamada tem a garantia de ser o último e não ocorre quando outras mensagens para essa solicitação são tratadas.
A função de retorno de chamada de status recebe atualizações sobre o status de operações assíncronas por meio de sinalizadores de notificação. As notificações que indicam que uma operação específica está concluída são chamadas de notificações de conclusão ou apenas conclusões. A tabela a seguir lista os seis sinalizadores de conclusão e a função correspondente que é concluída quando esse sinalizador é recebido.
Sinalizador de conclusão | Função |
---|---|
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 | Qualquer uma das funções acima quando ocorre um erro. |
Como os retornos de chamada são feitos durante o processamento da solicitação, o aplicativo deve gastar o mínimo de tempo possível na função de retorno de chamada para evitar a degradação da taxa de transferência de dados na rede. Por exemplo, exibir uma caixa de diálogo em uma função de retorno de chamada pode ser uma operação tão longa que o servidor encerra a solicitação.
A função de retorno de chamada pode ser chamada em um contexto de thread diferente do thread que iniciou a solicitação.
Da mesma forma, não há afinidade de thread de retorno de chamada quando você chama WinHttp de forma assíncrona: uma chamada pode começar de um thread, mas qualquer outro thread pode receber o retorno de chamada.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows XP, Windows 2000 Professional com SP3 [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2003, Windows 2000 Server com SP3 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | winhttp.h |
Redistribuível | WinHTTP 5.0 e Internet Explorer 5.01 ou posterior no Windows XP e Windows 2000. |