¿Cuáles son las diferencias entre el módulo urllib, urllib2, urllib3 y solicitudes?
En Python, ¿cuáles son las diferencias entre los módulos urllib
, urllib2
y ? ¿Por qué hay tres? Parece que hacen lo mismo...urllib3
requests
Sé que ya se ha dicho, pero recomiendo encarecidamente el requests
paquete Python.
Si ha usado otros lenguajes además de Python, probablemente esté pensando urllib
y urllib2
es fácil de usar, no tiene mucho código y es muy capaz, así es como solía pensar. Pero el requests
paquete es tan increíblemente útil y breve que todo el mundo debería utilizarlo.
En primer lugar, admite una API completamente relajante y es tan fácil como:
import requests
resp = requests.get('http://www.mywebsite.com/user')
resp = requests.post('http://www.mywebsite.com/user')
resp = requests.put('http://www.mywebsite.com/user/put')
resp = requests.delete('http://www.mywebsite.com/user/delete')
Independientemente de si es GET/POST, nunca más tendrá que codificar parámetros, simplemente toma un diccionario como argumento y está listo para comenzar:
userdata = {"firstname": "John", "lastname": "Doe", "password": "jdoe123"}
resp = requests.post('http://www.mywebsite.com/user', data=userdata)
Además, incluso tiene un decodificador JSON incorporado (nuevamente, sé que json.loads()
no hay mucho más que escribir, pero esto es conveniente):
resp.json()
O si los datos de tu respuesta son solo texto, usa:
resp.text
Esto es sólo la punta del iceberg. Esta es la lista de características del sitio de solicitudes:
- Dominios y URL internacionales
- Keep-Alive y agrupación de conexiones
- Sesiones con persistencia de cookies
- Verificación SSL estilo navegador
- Autenticación básica/digest
- Cookies elegantes de clave/valor
- Descompresión automática
- Cuerpos de respuesta Unicode
- Cargas de archivos de varias partes
- Tiempos de espera de conexión
- soporte .netrc
- Elemento de lista
- Pitón 2.7, 3.6—3.9
- A salvo de amenazas.
En la biblioteca estándar de Python 2 había dos bibliotecas HTTP que existían una al lado de la otra. A pesar del nombre similar, no estaban relacionados: tenían un diseño diferente y una implementación diferente.
urllib
era el cliente HTTP Python original, agregado a la biblioteca estándar en Python 1.2 . La documentación anteriorurllib
se puede encontrar en Python 1.4 .urllib2
era un cliente HTTP más capaz, agregado en Python 1.6 , pensado como reemplazo deurllib
:urllib2: versión nueva y mejorada pero incompatible de urllib (aún experimental).
La documentación anterior
urllib2
se puede encontrar en Python 2.1 .
La biblioteca estándar de Python 3 tiene una nueva urllib
versión fusionada/refactorizada/reescrita de los módulos anteriores.
urllib3
es un paquete de terceros (es decir, no está en la biblioteca estándar de CPython). A pesar del nombre, no está relacionado con los paquetes de la biblioteca estándar y no hay intención de incluirlo en la biblioteca estándar en el futuro.
Finalmente, requests
utiliza internamente urllib3
, pero apunta a una API más fácil de usar.