Antecedentes: Estoy usando urllib.urlretrieve
, a diferencia de cualquier otra función en los módulos urllib*
, debido a la compatibilidad con la función de enlace (véase reporthook
a continuación) .. que se utiliza para mostrar un texto barra de progreso. Esto es Python> = 2.6.Cómo atrapar el error 404 en urllib.urlretrieve
>>> urllib.urlretrieve(url[, filename[, reporthook[, data]]])
Sin embargo, urlretrieve
es tan tonto que no deja manera de detectar el estado de la solicitud HTTP (por ejemplo: ¿era 404 o 200?).
>>> fn, h = urllib.urlretrieve('http://google.com/foo/bar')
>>> h.items()
[('date', 'Thu, 20 Aug 2009 20:07:40 GMT'),
('expires', '-1'),
('content-type', 'text/html; charset=ISO-8859-1'),
('server', 'gws'),
('cache-control', 'private, max-age=0')]
>>> h.status
''
>>>
¿Cuál es la mejor manera conocida para descargar un archivo remoto HTTP con el apoyo en forma de gancho (para mostrar la barra de progreso) y un control de errores HTTP decente?
No proporcionar un estado HTTP en su solicitud probablemente se deba considerar un error en el stdlib (pero consulte la biblioteca, las solicitudes, mucho mejor a continuación) –