Estoy actualizando algunas API que he codificado usando Python y FastAPI. En la versión real, estoy enviando la información usando Query Paramenters , pero ahora quiero intentar enviar los datos usando Request Body , pero el código no parece funcionar.
A continuación, puede ver una muestra del código en el lado del servidor donde FastAPI debería devolver el texto que estoy enviando (para este ejemplo, solo la información "string_to_show", pero en el proyecto real habría más campos). Sé que es un código base, pero esto es solo una muestra.
from fastapi import FastAPI, Path, Query from pydantic import BaseModel import uvicorn app = FastAPI() class req_body(BaseModel): string_to_show:str @app.get("/test/") def scraper_shield(payload:req_body): request_feedback = str(payload.string_to_show) return request_feedback if __name__ == "__main__": uvicorn.run(app)En el lado del cliente , estoy usando este código, que simplemente envía la carga útil al servidor.
import requests payload = {'string_to_show':'Python is great!'} r = requests.get('http://127.0.0.1:8000/test/', params=payload) print(r.text)Al enviar la solicitud, debería obtener la cadena "¡Python es genial!" pero en cambio recibo algunos errores , debajo de los mensajes del Cliente y del Servidor:
Se supone que los métodos GET no tienen cuerpo. https://dropbox.tech/developers/limitations-of-the-get-method-in-http
El método POST está destinado a eso. Si realmente necesita una parametrización sólida con GET (pero realmente lo reconsideraría), piense en ponerlos en encabezados personalizados.
Está enviando los parámetros como cadenas de consulta cuando usa r = requests.get('http://127.0.0.1:8000/test/', params=payload) . En su lugar, debe usar r = requests.get('http://127.0.0.1:8000/test/', json=payload) que creará un cuerpo de solicitud y lo enviará correctamente. Esto es lo que también ve en los errores, que básicamente le indican que falta el cuerpo requerido.