CodeGym /Cursos /Python SELF ES /Trabajo con la red en la práctica

Trabajo con la red en la práctica

Python SELF ES
Nivel 23 , Lección 3
Disponible

4.1 Manejo de respuestas

El módulo requests ofrece métodos convenientes para trabajar con las respuestas del servidor.

Códigos de estado

Además de la respuesta, el servidor también envía un estado de procesamiento del request. La información sobre el estado se encuentra en los campos status_code y reason. Ejemplo a continuación:


import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.status_code)  # Muestra el código de estado de la respuesta
print(response.reason)  # Muestra la descripción textual del estado
print(response.ok)  # Devuelve True si el código de estado es menor a 400
        

Encabezados

Y claro, ¿qué request HTTP sería sin encabezados? Si necesitas los encabezados del request o de la respuesta, puedes acceder a ellos a través del campo headers:


import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.headers)  # Muestra los encabezados de la respuesta
print(response.headers['Content-Type'])  # Muestra el valor de un encabezado específico
            

Cuerpo de la respuesta

La respuesta del servidor puede contener un set de bytes, texto, json o xml. Si sabes exactamente qué estás solicitando al servidor, puedes obtener directamente un objeto del tipo deseado utilizando uno de los métodos/campos:


import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.text)  # Muestra el cuerpo de la respuesta como texto
print(response.json())  # Muestra el cuerpo de la respuesta como JSON
print(response.content)  # Muestra el cuerpo de la respuesta como bytes
        

Aprenderás más sobre los encabezados (headers) y los estados de respuesta en las lecciones sobre el funcionamiento de la red.

4.2 Manejo de errores

El módulo requests ofrece excepciones para manejar errores.

El estándar HTTP no implica excepciones, en su lugar trabaja con códigos de error (status_code). Si deseas que en resultado de un request fallido se genere una excepción de Python, necesitas llamar explícitamente a la función raise_for_status().

Ejemplo:


import requests

try:
    response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
    response.raise_for_status()  # Genera una excepción para los códigos de estado 4xx y 5xx
except requests.exceptions.HTTPError as err:
    print(f"HTTP error occurred: {err}")
except Exception as err:
    print(f"Other error occurred: {err}")
else:
    print("¡Éxito!")
        

Puedes aprender más sobre los códigos de error en las lecciones sobre el funcionamiento de la red.

4.3 Envío de datos

Antes del invento de JSON, grandes volúmenes de datos se enviaban a través de un «formulario». Un formulario es un objeto especial en la página del navegador (y un estándar de datos en HTTP). Si deseas enviar datos a través de un «formulario», simplemente necesitas pasar el parámetro data junto con el request.

¡Importante! Los requests GET no soportan formularios, ya que no contienen cuerpo de request. Todos sus datos se pasan solo en el URL.

Envío de datos en un request GET

En un request GET los datos se pasan a través de parámetros del URL. Aquí un ejemplo:


import requests

params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://httpbin.org/get', params=params)
print(response.url)  # Muestra el URL con los parámetros añadidos
    

Envío de datos de formulario

Usaremos un request POST para enviar datos al servidor.

Ejemplo:


import requests

data = {
    'username': 'example',
    'password': 'password'
}
response = requests.post('https://httpbin.org/post', data=data)
print(response.json())
        

Envío de archivos

Si quieres enviar datos binarios por internet, por ejemplo, subir una imagen, necesitas pasar tu archivo o archivos en el request utilizando el parámetro files.

Ejemplo:


import requests

files = {'file': open('example.txt', 'rb')}
response = requests.post('https://httpbin.org/post', files=files)
print(response.json())
        

Fácil como el abecé. Si quieres enviar varios archivos, enumeralos con cualquier nombre en la variable files.

¡Importante! No olvides cerrar el archivo después de enviarlo para evitar fugas de recursos. Es mejor usar la construcción with, que cierra automáticamente el archivo después de completar la operación:


import requests

with open('example.txt', 'rb') as f:
    files = {'file': f}
    response = requests.post('https://httpbin.org/post', files=files)
print(response.json())
        

4.4 Inicio de sesión y autorización

API (Application Programming Interface) es un conjunto de reglas y protocolos que permiten a diferentes programas interactuar entre sí. Muchos sitios y servicios permiten enviarles requests y trabajar con su API solo después de iniciar sesión.

Después de un inicio de sesión exitoso, recibes un objeto especial: una sesión (session), que contiene un número único de tu «sesión autorizada con el servidor». Para futuros requests, necesitas usar este objeto.

Autenticación

Para iniciar sesión en el servidor, necesitas pasar por la autenticación (proceso de iniciar sesión), para lo cual debes pasar las credenciales de usuario con el request.


import requests
from requests.auth import HTTPBasicAuth
        
response = requests.get('https://httpbin.org/basic-auth/user/pass', \ 
                        auth=HTTPBasicAuth('user', 'pass'))
print(response.status_code)
        
    

Así es como luce el proceso de autorización, pero usualmente se usa junto con una sesión.

Uso de sesiones

Las sesiones permiten mantener parámetros entre requests, como cookies o información de autorización del usuario.


import requests

payload = {
    'username': 'your_username',
    'password': 'your_password'
}
            
# Creación de una sesión
session = requests.Session()
            
# Inicio de sesión en el sitio
login_response = session.post('https://example.com/login', data = payload)
            
# Trabajo continuo bajo la sesión del usuario autenticado
data_response = session.get('https://example.com/api/data')
print(data_response.json())
        
2
Tarea
Python SELF ES, nivel 23, lección 3
Bloqueada
Procesamiento de respuestas del servidor con el módulo requests
Procesamiento de respuestas del servidor con el módulo requests
2
Tarea
Python SELF ES, nivel 23, lección 3
Bloqueada
Manejo de errores de solicitudes con el módulo requests
Manejo de errores de solicitudes con el módulo requests
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION