2010-07-22 16 views
47

¿Cuándo alguien usaría httplib y cuándo urllib?Python urllib vs httplib?

¿Cuáles son las diferencias?

Creo que listo urllib usa httplib, planeo hacer una aplicación que necesite hacer una solicitud http y hasta ahora solo he usado httplib.HTTPConnection en python para las solicitudes, y leyendo sobre urllib veo que puedo usar eso para la solicitud también, ¿cuál es el beneficio de uno u otro?

+0

Recuerda que en Python 3.x 'urllib' y' urllib2' han sido ** unificados ** en un solo módulo 'urllib'. Así que 2.x 'urllib' y 3.x' urllib' NO son los mismos módulos. – treecoder

+2

Para aquellos con la misma pregunta (proveniente de Google), sepan que todas estas respuestas son geniales. Pero también sepa que la respuesta a "Qué biblioteca debe usar" depende en gran medida de lo que es importante para usted: ¿desea una API amigable O algo que automatice la configuración y haga que un GET sea muy simple de hacer? ¿Es usted libre de elegir su propia biblioteca, O está teniendo una biblioteca "integrada" (es decir, tendría que admitir usuarios que no tienen instalado "httplib2") algo que es importante para usted? Hay un caso para muchas bibliotecas porque el módulo incorporado de Python no puede satisfacerlas a todas. –

+0

Pruebe [requests] (http://pypi.python.org/pypi/requests), el módulo muy simple y poderoso basado en urllib2-docs [aquí] (http://docs.python-requests.org/en/ latest/index.html). – Ambyte

Respuesta

42

urllib (especialmente urllib2) maneja muchas cosas de manera predeterminada o tiene las librerías apropiadas para hacerlo. Por ejemplo, urllib2 seguirá redireccionamientos automáticamente y puede usar cookiejar para manejar scripts de inicio de sesión. Estas son todas las cosas que tendrías que codificar tú mismo si estuvieras usando httplib.

+2

En resumen, no use ninguno. Use urllib2? –

+3

Un poco: P Solo piensa en urllib2 como ... bueno, urllib con un "2" para "el doble de increíble" al final. – Robus

+0

La única advertencia es que deberá: desde urllib import urlencode ya que urllib2 no implementa urlencode. –

6

Si se trata únicamente de http/https y necesita acceso a material específico de HTTP, use httplib.

Para todos los demás casos, use urllib2.

9

urllib/urllib2 se basa en httplib. Ofrece más funciones que escribir directamente en httplib.

sin embargo, httplib le da un control más fino sobre las conexiones subyacentes.

5

Si necesitas material de alto nivel como el almacenamiento en caché, mantenimiento de conexiones, la compresión o la autenticación, tratan httplib2

16

me gustaría decir algo sobre urllib, urllib2, httplib y .

La principal diferente entre urllib* y httplib* es que:

httplib y httplib2 maneja HTTP/HTTPS solicitud y respuesta directa y le dará más espacio para hacer su propio trabajo.

urllib y urllib2 se basan en httplib, son más abstractos y potentes, pero a veces no cumplirán con su necesidad especificada sobre algunas operaciones relacionadas con HTTP.

Y para httplib y , diría que ambos son HTTP client library. Sin embargo, es mucho más potente y tiene muchas más funciones que httplib.

En cuanto a urllib y urllib2, cita de this link:

urllib y urllib2 son los dos módulos de Python que hacen URL relacionada con la solicitud cosas, pero ofrecen diferentes funcionalidades. Sus dos diferencias más significativas se enumeran a continuación:

  • urllib2 puede aceptar un objeto Solicitud para establecer los encabezados de una solicitud de URL, urllib acepta solo una URL. Esto significa que no puede enmascarar su cadena de agente de usuario, etc.
  • urllib proporciona el método urlencode que se utiliza para la generación de cadenas de consulta GET, urllib2 no tiene dicha función. Esta es una de las razones por las que urllib se usa a menudo junto con urllib2.

recomendaría mi blog personal Httplib Httplib2 Urllib Urllib2-what’s the Difference.

espero que ayude :-)

1

Para esa gente que se mueven las cosas hasta el AP3 (y por alguna razón no pueden o no han rediseñado para utilizar el módulo impresionante requests), esta es una buena transición entre versiones:

try: 
    import http.client as httplib 
except ImportError: 
    import httplib 

Funciona en ambos conjuntos de versiones de Python.