Python requests es una bi­blio­te­ca popular que permite enviar so­li­ci­tu­des HTTP y comprobar las re­s­pue­s­tas. Aunque .get() es el método más utilizado del módulo, existen muchas otras opciones di­s­po­ni­bles.

¿Qué es Python requests?

Python requests es una he­rra­mie­n­ta estándar que te permite enviar so­li­ci­tu­des HTTP a través del lenguaje de pro­gra­ma­ción Python. Se basa en una interfaz de pro­gra­ma­ción clara y eficaz que facilita mucho la in­te­gra­ción de funciones de terceros. La bi­blio­te­ca requests de Python ofrece varias he­rra­mie­n­tas con las que puedes enviar so­li­ci­tu­des HTTP y recibir las re­s­pue­s­tas co­rre­s­po­n­die­n­tes. Aunque el módulo Python requests es am­plia­me­n­te utilizado y muy re­co­me­n­da­ble, no forma parte de la in­s­ta­la­ción estándar de Python.

In­s­ta­la­ción y uso de la bi­blio­te­ca Python requests

Antes de instalar la bi­blio­te­ca Python requests, se re­co­mie­n­da co­n­fi­gu­rar primero una máquina virtual donde puedas probarla sin preo­cu­pa­cio­nes. Después, utiliza pip para la in­s­ta­la­ción con el siguiente comando:

$ python -m pip install requests
bash

Una vez instalada, puedes importar la bi­blio­te­ca en tu código con el siguiente comando:

import requests
python

Fu­n­cio­na­mie­n­to, sintaxis y métodos

Al igual que otras he­rra­mie­n­tas similares, Python requests también envía una solicitud HTTP y, si la tra­n­s­mi­sión tiene éxito, recibe una respuesta. La respuesta es un objeto que contiene toda la in­fo­r­ma­ción im­po­r­ta­n­te, como el contenido, la co­di­fi­ca­ción y el estado. La sintaxis de una solicitud de este tipo es la siguiente:

requests.method(url, **kwargs)
python
Nota

**kwargs re­pre­se­n­ta ar­gu­me­n­tos op­cio­na­les que puedes pasar a las funciones, como headers, files o cookies.

Aunque .get() es la función que usarás más a menudo, Python requests te ofrece otros métodos. Las funciones di­s­po­ni­bles son:

  • .delete(url, **kwargs): utiliza .delete() para eliminar un recurso es­pe­cí­fi­co
  • .get(url, parameter=None, **kwargs): utiliza .get() para solicitar in­fo­r­ma­ción a un servidor
  • .head(url, **kwargs): con .head() también solicitas una respuesta de un servidor, pero te limitas al en­ca­be­za­do
  • .patch(url, data=None, **kwargs): con .patch() puedes mejorar el re­n­di­mie­n­to, ya que solo envía cambios al recurso
  • .post(url, data=None, json=None, **kwargs): con .post() envías datos al servidor, como fo­r­mu­la­rios o in­fo­r­ma­ción en formato JSON
  • .put(url, data=None, **kwargs): con .put() modificas un recurso existente y generas nuevos datos en el servidor.
  • .request(method, url, **kwargs): con .request() envías una solicitud uti­li­za­n­do un método es­pe­cí­fi­co a la URL

Ejemplo del método .get()

La es­tru­c­tu­ra de .get() es muy sencilla, lo que hace que Python requests sea una bi­blio­te­ca práctica. Solo necesitas el método y la URL a la que quieres acceder, la cual se escribe entre comillas. Aquí tienes un ejemplo:

import requests
requests.get("https://ejemplo.com")
python

Recibirás la respuesta del servidor objetivo au­to­má­ti­ca­me­n­te. Puedes almacenar la respuesta en una variable para exa­mi­nar­la po­s­te­rio­r­me­n­te:

import requests
response = requests.get("https://ejemplo.com")
python

Consultar códigos de estado

La respuesta más básica que puedes recibir de una solicitud es un código de estado HTTP, que te indica si la solicitud fue exitosa o no. El código de estado es de tres dígitos, y existen varias ca­te­go­rías que te informan sobre el resultado de tu solicitud. Aquí tienes las ca­te­go­rías más im­po­r­ta­n­tes:

  • 1XX: contiene in­fo­r­ma­ción adicional
  • 2XX: indica que la solicitud fue exitosa
  • 3XX: informa de una re­di­re­c­ción de tu solicitud
  • 4XX: informa de un error del lado del cliente
  • 5XX: informa de un error del lado del servidor

Entre los códigos de estado más comunes se en­cue­n­tran “200 – OK” (para una solicitud exitosa) y “404 – Not Found” (si los datos so­li­ci­ta­dos no se en­cue­n­tran en el servidor).

Después de hacer una solicitud con Python requests, puedes consultar el estado usando .status_code. Para ello, utiliza el siguiente código:

response.status_code
python

Si la solicitud tuvo éxito, recibirás el siguiente resultado:

200
python

Puedes usar el siguiente código para vi­sua­li­zar­lo mejor:

if response.status_code == 200:
	print("La solicitud tuvo éxito.")
elif response.status_code == 404:
	print("La solicitud no tuvo éxito.")
python

Ver los en­ca­be­za­dos con Python requests

El en­ca­be­za­do de una respuesta HTTP contiene mucha in­fo­r­ma­ción útil. Entre otros datos, en­co­n­tra­rás el tipo de contenido enviado, el límite de tiempo para el al­ma­ce­na­mie­n­to en caché y otros detalles. Con la bi­blio­te­ca Python requests, puedes ver fá­ci­l­me­n­te el en­ca­be­za­do. Primero, ejecuta la función .get() y luego accede a .headers:

import requests
response = requests.get("https://ejemplo.com")
response.headers
python

La salida te mostrará un objeto que contiene los valores del en­ca­be­za­do. También puedes consultar valores in­di­vi­dua­les es­pe­ci­fi­ca­n­do el comando co­rre­s­po­n­die­n­te. Por ejemplo, si quieres saber más sobre el tipo de contenido, debes ejecutar el siguiente código:

response.headers["content-type"]
python

Acceder al payload

El paquete de datos que se envía entre el servidor y el cliente se conoce como “payload” y se encuentra en el cuerpo de la respuesta. Puedes utilizar response para acceder a la in­fo­r­ma­ción del payload. Para obtener una re­pre­se­n­ta­ción en bytes, utiliza el siguiente código:

import requests
response = requests.get("https://ejemplo.com")
response.content
type(response.content)
python

Si prefieres in­tro­du­cir la in­fo­r­ma­ción obtenida en una cadena, utiliza el siguiente código:

response.text
type(response.text)
python

Python requests obtendrá la co­di­fi­ca­ción del en­ca­be­za­do. Como al­te­r­na­ti­va, también puedes indicar al sistema que utilice un método de co­di­fi­ca­ción diferente. Aquí tienes un código de ejemplo:

response.encoding = "utf-8"
response.text
python

Verificar el progreso

Cuando envías una solicitud, Python requests se prepara para evitar errores no deseados. Durante el envío de la solicitud, entre otras cosas, comprueba el en­ca­be­za­do. Puedes consultar el progreso de la solicitud uti­li­za­n­do la función .request, con el siguiente código:

import requests
response = requests.post("https://ejemplo.com", json={"key": "value"})
print(response.request.headers["content-type"])
print(response.request.url)
print(response.request.body)
python

Esto te pro­po­r­cio­na in­fo­r­ma­ción sobre el payload, el en­ca­be­za­do, la URL y muchos otros aspectos.

Au­te­n­ti­ca­ción con el módulo de Pythonrequests

El parámetro auth se utiliza en Python requests para enviar una au­te­n­ti­ca­ción al servidor, pe­r­mi­tie­n­do verificar la identidad de quien in­ter­ac­túa con él. usa el siguiente código para aplicar la función de au­te­n­ti­ca­ción:

import requests
from requests.auth import HTTPBasicAuth
response = requests.get("https://tupagina.com/basic-auth/user/passwd", 
	auth=HTTPBasicAuth("user", "passwd"))
print(response.status_code)
print(response.request.headers["Authorization"])
python

Utilizar un ce­r­ti­fi­ca­do SSL

En general, se re­co­mie­n­da utilizar un ce­r­ti­fi­ca­do SSL para evitar la pérdida de datos y accesos no au­to­ri­za­dos. Python requests ofrece un ce­r­ti­fi­ca­do SSL de forma pre­de­te­r­mi­na­da. Sin embargo, si quieres evitar la ve­ri­fi­ca­ción SSL al hacer una solicitud, puedes hacerlo con el siguiente código:

import requests
requests.get("https://ejemplo.com", verify=False)
python

De todas formas, recibirás una ad­ve­r­te­n­cia al respecto.

Iniciar un timeout con Python requests

Con Python requests, también puedes limitar el tiempo máximo de espera para una respuesta. De manera pre­de­te­r­mi­na­da, el cliente esperará una respuesta in­de­fi­ni­da­me­n­te. Si la respuesta no llega, las so­li­ci­tu­des pueden acu­mu­lar­se y afectar al re­n­di­mie­n­to, pero puedes evitarlo con el parámetro timeout. El siguiente código hace que Python requests cancele la solicitud una vez tra­n­s­cu­rri­dos al menos dos segundos:

requests.get("https://ejemplo.com", timeout=2)
python
Consejo

Despliega tu página web o apli­ca­ción di­re­c­ta­me­n­te desde GitHub: Deploy Now de IONOS es la mejor opción tanto para apli­ca­cio­nes de una sola página como para páginas web estáticas. ¡Elige la tarifa que mejor se adapte a tus ne­ce­si­da­des y disfruta de una co­n­fi­gu­ra­ción más rápida, flujos de trabajo op­ti­mi­za­dos y un diseño seguro!

Ir al menú principal