Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

875
Vistas
Usando FastAPI de forma sincronizada, ¿cómo puedo obtener el cuerpo sin procesar de una solicitud POST?

Usando FastAPI en un modo sincronizado , no asíncrono, me gustaría poder recibir el cuerpo RAW, sin cambios, de una solicitud de publicación.

Todos los ejemplos que puedo encontrar muestran código asíncrono, cuando lo pruebo de forma normal, el request.body() lo muestra como un objeto coroutine.

Y cuando lo pruebo publicando algo de XML en este punto final, obtengo un 500 "Error interno del servidor"

 from fastapi import FastAPI, Response, Request, Body app = FastAPI() @app.get("/") def read_root(): return {"Hello": "World"} @app.post("/input") def input_request(request: Request): # how can I access the RAW request body here? body = request.body() # do stuff with the body here return Response(content=body, media_type="application/xml")

¿Esto no es posible con FastAPI?

Nota: una solicitud de entrada simplificada se vería así

 POST http://127.0.0.1:1083/input Content-Type: application/xml <XML> <BODY>TEST</BODY> </XML>

y no tengo control sobre cómo se envían las solicitudes de entrada, porque necesito reemplazar una API SOAP existente

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Si un objeto es co-rutinario, debe esperarse. FastAPI se basa en Starlette, y los métodos de Starlette para devolver el cuerpo de la solicitud son métodos asíncronos ; por lo tanto, debe "esperarlos".

ACTUALIZAR

Alternativamente, si está seguro de que los datos entrantes son un JSON válido, puede usar el campo Cuerpo , como se muestra a continuación:

 @app.post("/input") def input_request(payload: dict = Body(...)): return payload

Sin embargo, si los datos entrantes están en formato XML, como en el ejemplo que proporcionó, podría ser mejor pasarlos a través de archivos (como se muestra a continuación), utilizando un módulo de tempfile en su cliente.

 @app.post("/input") def input_request(file: bytes = File(...)): return file
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda