Слушатель Webhook в Fastapi повышает 422 ошибку незаконной организации [дублировать]Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Слушатель Webhook в Fastapi повышает 422 ошибку незаконной организации [дублировать]

Сообщение Anonymous »

У меня есть слушатель Webhook, который использует Apirouter для обозначения маршрута для приложения на сервере FastAPI. Приложение должно получить запрос Post (ожидая данных в формате JSON) и войти в это в консоли. Тем не менее, я получаю последовательные перенаправления. Я попытался сделать следующее с curl: < /p>
curl -X 'POST' \
'http://127.0.0.1:8010/webhook' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{"data": {"UK":"test"}}'
< /code>
Слушатель: < /p>
import hmac
from logging import Logger, info
from fastapi import APIRouter, FastAPI, Header, Request, Response
from router.router1 import rout
from pydantic import BaseModel

WEBHOOK_SECRET = '123-456-789'

class WebhookResponse(BaseModel):
result: str

class WebhookData(BaseModel):
body: dict

app = FastAPI()
rout = APIRouter()

@app.get("/")
async def welcome() -> dict:
return { "message": 'Hello World!' }

def printLog(data):
info(f"Raw data: {data}")

@rout.post("/webhook", response_model=WebhookResponse, status_code=200)
async def webhook(
webhook_input: WebhookData,
request: Request,
response: Response,
content_length: int = Header(...),
x_hook_signature: str = Header(None)
):
if content_length > 1_000_000:
# To prevent memory allocation attacks
Logger.error(f"Content too long ({content_length})")
response.status_code = 400
return {"result": "Content too long"}
if x_hook_signature:
raw_input = await request.body()
input_hmac = hmac.new(
key=WEBHOOK_SECRET.encode(),
msg=raw_input,
digestmod="sha512"
)
if not hmac.compare_digest(
input_hmac.hexdigest(),
x_hook_signature
):
Logger.error("Invalid message signature")
response.status_code = 400
return {"result": "Invalid message signature"}
Logger.info("Message signature checked ok")
else:
Logger.info("No message signature to check")
printLog(webhook_input)
return {"result": "ok"}

app.include_router(rout)
< /code>
Curl Отпечатает следующую ошибку: < /p>
{
"detail": [
{
"loc": [
"body"
],
"msg": "value is not a valid dict",
"type": "type_error.dict"
}
]
}
< /code>
со следующей напечатанной на консоли: < /p>
INFO: 127.0.0.1:50192 - "POST /webhook/ HTTP/1.1" 422 Unprocessable Entity


Подробнее здесь: https://stackoverflow.com/questions/742 ... tity-error
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»