Indicación de progreso con descarga de archivos HTTP usando WinHTTP
-
05-07-2019 - |
Pregunta
Quiero implementar una barra de progreso en mi aplicación de Windows C ++ al descargar un archivo usando WinHTTP. ¿Alguna idea de cómo hacer esto? Parece que WinHttpSetStatusCallback es lo que quiero usar, pero no veo qué notificación debo buscar ... o cómo obtener el " porcentaje descargado " ...
¡Ayuda!
¡Gracias!
Solución
Por los documentos :
WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE
Los datos están disponibles para ser recuperados con WinHttpReadData. los Puntos de parámetro lpvStatusInformation a un DWORD que contiene el número de bytes de datos disponibles. los Parámetro dwStatusInformationLength en sí es 4 (el tamaño de un DWORD).
y
WINHTTP_CALLBACK_STATUS_READ_COMPLETE
Los datos se leyeron correctamente desde el servidor. El lpvStatusInformation parámetro contiene un puntero a la búfer especificado en la llamada a WinHttpReadData. los Parámetro dwStatusInformationLength contiene el número de bytes leídos.
Puede haber otras notificaciones relevantes, pero estas dos parecen ser las claves. Obtención de " porcentaje " no es necesariamente trivial porque es posible que no sepa cuántos datos está obteniendo (no todas las descargas tienen un conjunto de longitud de contenido ...); puede obtener los encabezados con:
WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE
Se ha recibido el encabezado de respuesta y está disponible con WinHttpQueryHeaders. los El parámetro lpvStatusInformation es NULL.
y si Content-Length está disponible, el porcentaje puede calcularse haciendo un seguimiento del número total de bytes en cada " datos disponibles " notificación, de lo contrario, tu conjetura es tan buena como la mía ;-).