¿Cuáles son las diferencias entre el módulo urllib, urllib2, urllib3 y solicitudes?

Resuelto Paul Biggar asked hace 14 años • 11 respuestas

En Python, ¿cuáles son las diferencias entre los módulos urllib, urllib2y ? ¿Por qué hay tres? Parece que hacen lo mismo...urllib3requests

Paul Biggar avatar Jan 07 '10 10:01 Paul Biggar
Aceptado

Sé que ya se ha dicho, pero recomiendo encarecidamente el requestspaquete Python.

Si ha usado otros lenguajes además de Python, probablemente esté pensando urlliby urllib2es fácil de usar, no tiene mucho código y es muy capaz, así es como solía pensar. Pero el requestspaquete 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.
Hutch avatar Feb 11 '2013 00:02 Hutch

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.

  • urllibera el cliente HTTP Python original, agregado a la biblioteca estándar en Python 1.2 . La documentación anterior urllibse puede encontrar en Python 1.4 .

  • urllib2era un cliente HTTP más capaz, agregado en Python 1.6 , pensado como reemplazo de urllib:

    urllib2: versión nueva y mejorada pero incompatible de urllib (aún experimental).

    La documentación anterior urllib2se 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.

urllib3es 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, requestsutiliza internamente urllib3, pero apunta a una API más fácil de usar.

pdw avatar Aug 03 '2020 16:08 pdw