Introducción Completa a `Requests` en Python: Tu Herramienta para Hacer Solicitudes HTTP


El módulo `requests` en Python es una de las bibliotecas más utilizadas para realizar solicitudes HTTP de manera sencilla y eficiente.


Con ella, puedes:

  • hacer solicitudes a servidores
  • obtener respuestas
  • manejar cookies
  • autenticaciones
  • y mucho más.


En este post, te guiaré a través de sus principales funcionalidades y parámetros, para que puedas aprovechar al máximo esta herramienta en tus proyectos.



¿Qué es `requests`?

`requests` es una biblioteca HTTP para Python, diseñada para que las solicitudes HTTP sean fáciles de usar. Soporta múltiples métodos de solicitud como `GET`, `POST`, `PUT`, `DELETE`, entre otros, lo que la convierte en una solución integral para interactuar con APIs y servicios web.


Para instalar la biblioteca, puedes usar `pip`:


pip install requests


Para importarlo a nuestro entorno de trabajo lo hacemos de esta manera


import requests



Realizar una Solicitud `GET`

El método más común en HTTP es `GET`, que se utiliza para obtener datos de un servidor.


respuesta = requests.get('https://url.ejemplo.com/data')


- `respuesta`: Es un objeto de la clase `Response`, que contiene la respuesta del servidor.

  


Parámetros de `requests.get()`

Aunque la solicitud básica es simple, `requests.get()` ofrece varios parámetros que te permiten personalizar la solicitud:


1. `params`: Un diccionario que puedes usar para enviar parámetros de consulta en la URL.


  respuesta = requests.get('https://url.ejemplo.com/data',

params={'key': 'value'})



2. `headers`: Un diccionario que te permite enviar encabezados HTTP personalizados.


  encabezados = {'Authorization': 'Bearer token123'}

  respuesta = requests.get('https://url.ejemplo.com/data',

headers=encabezados)



3. `timeout`: Especifica el tiempo en segundos que la solicitud esperará antes de dar un error por tiempo de espera. Evita que la solicitud quede bloqueada si el servidor no responde.


  respuesta = requests.get('https://url.ejemplo.com/data',

timeout=5)



4. `auth`: Un tuple `(usuario, contraseña)` para manejar autenticación básica.


  from requests.auth import HTTPBasicAuth

  respuesta = requests.get('https://url.ejemplo.com/data',

auth=HTTPBasicAuth('user', 'pass'))



5. `cookies`: Un diccionario para enviar cookies junto con la solicitud.


  cookies = {'session_id': 'abcdef123456'}

  respuesta = requests.get('https://url.ejemplo.com/data',

cookies=cookies)



6. `allow_redirects`: Permite o prohíbe las redirecciones HTTP (por defecto está en `True`).


  respuesta = requests.get('https://url.ejemplo.com/data',

allow_redirects=False)



Manejar Respuestas con el Objeto `Respuesta`

El objeto `Respuesta` contiene la respuesta del servidor y tiene varios atributos útiles:


1. `respuesta.status_code`: El código de estado HTTP de la respuesta.


  print(respuesta.status_code) 



2. `respuesta.text`: El contenido de la respuesta en formato de texto.


  print(respuesta.text)



3. `respuesta.json()`: Si la respuesta es JSON, puedes convertirla directamente en un diccionario de Python.


  informacion = respuesta.json()



4. `respuesta.content`: El contenido en formato binario (útil para descargar archivos).


  with open('imagen.jpg', 'wb') as f:

    f.write(respuesta.content)



5. `respuesta.headers`: Un diccionario con los encabezados HTTP de la respuesta.


  print(respuesta.headers)



6. `respuesta.cookies`: Las cookies enviadas por el servidor.


  print(respuesta.cookies)



Realizar una Solicitud `POST`

El método `POST` se utiliza para enviar datos al servidor, por ejemplo, para enviar datos de un formulario.


info = {'nombre': 'Federico', 'edad': 48}

respuesta = requests.post('https://url.ejemplo.com/user',

data=info)



Parámetros de `requests.post()`

Los parámetros de `requests.post()` son similares a los de `requests.get()`, con la adición de:


1. `data`: Un diccionario de los datos que quieres enviar como cuerpo de la solicitud.


  info= {'clave1': 'valor1', 'clave2': 'valor2'}

  respuesta = requests.post('https://url.ejemplo.com/data',

data=info)



2. `json`: Un diccionario que se convierte automáticamente en JSON para enviarlo al servidor. Es preferible a `data` cuando trabajas con APIs que esperan datos en formato JSON.


  info_json = {'nombre': 'Federico', 'edad': 48}

  respuesta = requests.post('https://url.ejemplo.com/user',

json=info_json)



Otros Métodos HTTP Soportados

Además de `GET` y `POST`, `requests` soporta otros métodos HTTP importantes:


1. `requests.put()`: Utilizado para actualizar o reemplazar un recurso en el servidor.


  respuesta = requests.put('https://url.ejemplo.com/data/123',

data={'clave': 'nuevo_valor'})



2. `requests.delete()`: Se utiliza para eliminar un recurso del servidor.


  respuesta = requests.delete('https://url.ejemplo.com/data/123')



3. `requests.head()`: Devuelve solo los encabezados de la respuesta, sin el contenido.


  respuesta = requests.head('https://url.ejemplo.com/data')



4. `requests.options()`: Devuelve los métodos HTTP permitidos en el servidor para el recurso especificado.


  respuesta = requests.options('https://url.ejemplo.com/data')



Manejo de Errores

Es importante manejar errores cuando trabajas con solicitudes HTTP. `requests` lanza excepciones que puedes capturar para evitar que tu programa falle en caso de un problema.


- `requests.exceptions.RequestException`: La excepción genérica que cubre todos los errores relacionados con solicitudes.

  

Ejemplo:


import requests


try:

  respuesta = requests.get('https://url.ejemplo.com/data', timeout=5)

  respuesta.raise_for_status() # Lanza una excepción si el código de estado no es 200


except requests.exceptions.HTTPError as errh:

  print("Error HTTP:", errh)


except requests.exceptions.ConnectionError as errc:

  print("Error de conexión:", errc)


except requests.exceptions.Timeout as errt:

  print("Error de tiempo de espera:", errt)


except requests.exceptions.RequestException as err:

  print("Error en la solicitud:", err)



Descargando Archivos

Con `requests`, es fácil descargar archivos desde una URL y guardarlos localmente.


Ejemplo:


url = 'https://ejemplo.com/archivo.zip'

respuesta = requests.get(url, stream=True)


with open('archivo.zip', 'wb') as f:

  for chunk in respuesta.iter_content(chunk_size=8192):

    if chunk:

      f.write(chunk)



Sesiones en `requests`

El uso de sesiones (`requests.Session()`) te permite mantener la información a través de múltiples solicitudes, como las cookies o las cabeceras.


Ejemplo:


sesion = requests.Session()

sesion.headers.update({'Authorization': 'Bearer token123'})


respuesta = sesion.get('https://url.ejemplo.com/data')



Hay mucho más contenido sobre Python para ti

Puedes conocer todo el contenido que comparto en mi perfil de LinkedIn

 

Puedes descargar GRATIS mi manual completo en pdf de Python Rápido


image


This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.