0Pricing
Python Academy · Lección

Solicitudes HTTP con requests y httpx

Obtenga páginas web y gestione redirecciones, sesiones y encabezados.

Solicitudes HTTP con requests y httpx es una lección gratuita de Python Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Python Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Python Academy incluye 4 lecciones en total.

Biblioteca requests

requests es la biblioteca HTTP síncrona estándar. Es sencilla, está ampliamente probada y resulta perfecta para scripts y llamadas puntuales a API.

# pip install requests
import requests

r = requests.get("https://api.github.com/users/octocat")
print(r.status_code)   # 200
print(r.json()["login"])   # octocat

Parámetros de consulta y encabezados

Pase parámetros de consulta con params= y encabezados personalizados con headers=.

import requests

r = requests.get(
    "https://api.example.com/search",
    params={"q": "python", "page": 1},
    headers={"Authorization": "Bearer my-token"}
)
print(r.url)    # full URL with query string

POST con cuerpo JSON

Envíe datos JSON con json=; requests establece automáticamente Content-Type: application/json.

import requests

r = requests.post(
    "https://api.example.com/users",
    json={"name": "Alice", "email": "alice@example.com"}
)
print(r.status_code)   # 201
print(r.json())

Objetos de sesión

Use una requests.Session para conservar encabezados, cookies y el grupo de conexiones entre varias solicitudes.

import requests

with requests.Session() as s:
    s.headers.update({"Authorization": "Bearer token"})
    users = s.get("https://api.example.com/users").json()
    profile = s.get("https://api.example.com/me").json()

Tiempo de espera y reintentos

Establezca siempre un tiempo de espera. Use urllib3.util.retry.Retry con un HTTPAdapter para realizar reintentos automáticos.

import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

s = requests.Session()
retry = Retry(total=3, backoff_factor=1)
s.mount("https://", HTTPAdapter(max_retries=retry))

r = s.get("https://api.example.com/data", timeout=5)

Gestión de errores

Llame a r.raise_for_status() para generar un HTTPError en las respuestas 4xx/5xx.

import requests

try:
    r = requests.get("https://api.example.com/data")
    r.raise_for_status()
    data = r.json()
except requests.HTTPError as e:
    print(f"HTTP error: {e.response.status_code}")
except requests.ConnectionError:
    print("Network unreachable")

Descarga de archivos

Transmita las descargas de archivos grandes con stream=True para evitar cargarlo todo en memoria.

import requests

with requests.get("https://example.com/large.zip", stream=True) as r:
    r.raise_for_status()
    with open("large.zip", "wb") as f:
        for chunk in r.iter_content(chunk_size=8192):
            f.write(chunk)

httpx: HTTP asíncrono moderno

httpx tiene la misma API que requests, pero admite operaciones asíncronas. Úselo en aplicaciones FastAPI y flujos de trabajo asíncronos.

# pip install httpx
import httpx

# Synchronous:
r = httpx.get("https://httpbin.org/get")
print(r.json())

# Asynchronous:
import asyncio
async def main():
    async with httpx.AsyncClient() as c:
        r = await c.get("https://httpbin.org/get")
        print(r.json())
asyncio.run(main())

AsyncClient de httpx

Comparta un único AsyncClient entre las solicitudes para reutilizar las conexiones. Créelo durante el inicio y ciérrelo durante el apagado.

import httpx, asyncio

CLIENT: httpx.AsyncClient | None = None

async def startup():
    global CLIENT
    CLIENT = httpx.AsyncClient(timeout=10)

async def shutdown():
    await CLIENT.aclose()

Ayudantes de autenticación

Tanto requests como httpx admiten ayudantes de autenticación: auth=(user, pass) para autenticación básica y clases Auth personalizadas para autenticación mediante tokens.

import httpx

class BearerAuth(httpx.Auth):
    def __init__(self, token): self.token = token
    def auth_flow(self, request):
        request.headers["Authorization"] = f"Bearer {self.token}"
        yield request

async with httpx.AsyncClient(auth=BearerAuth("my-token")) as c:
    r = await c.get("https://api.example.com/me")

Simulación de HTTP en las pruebas

Use respx (para httpx) o responses (para requests) para simular llamadas HTTP en las pruebas.

# pip install respx
import httpx, respx, asyncio

@respx.mock
async def test_api():
    respx.get("https://api.example.com/users").mock(
        return_value=httpx.Response(200, json=[{"id":1}])
    )
    async with httpx.AsyncClient() as c:
        r = await c.get("https://api.example.com/users")
    assert r.json() == [{"id": 1}]

Comprobación rápida

¿Qué hace response.raise_for_status()?

Repaso

Use requests para HTTP síncrono. Use httpx cuando necesite operaciones asíncronas. Establezca siempre tiempos de espera, use sesiones para reutilizar conexiones, llame a raise_for_status() y transmita las descargas grandes. Simule HTTP en las pruebas con respx o responses.

Preguntas frecuentes

¿La lección «Solicitudes HTTP con requests y httpx» es gratis?

Sí — el texto completo de «Solicitudes HTTP con requests y httpx» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Python Academy, actualiza a CoddyKit PRO. El curso de Python Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Solicitudes HTTP con requests y httpx»?

Obtenga páginas web y gestione redirecciones, sesiones y encabezados. Practicas Python Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Python Academy?

No se requiere experiencia previa. Python Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Solicitudes HTTP con requests y httpx»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Python Academy?

Sí. Cada lección de Python Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Solicitudes HTTP con requests y httpx
  2. Análisis de HTML con BeautifulSoup
  3. Creación de un spider con Scrapy
  4. Gestión de JavaScript y medidas contra el scraping
← Volver a Python Academy