Как сбросить http Content-type: application / json; в FastAPI

Я напишу сценарий python, который прослушивает веб-перехватчик для настраиваемого инструмента, который будет отправлять json (они могут также поддерживать другой формат) на порт, который я могу указать.

Как написать что-то похожее на команду linux: nc -l 9000 для сброса вывода, который я получаю на этом порту (заголовок и тело)?

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    print()  <- how to get the data here?
    return {"message": "ok"}

Я хочу распечатать содержимое в терминале, тогда я легко смогу увидеть, что я получу, и предпринять меры. Не уверен, что я должен воспроизвести им, если это вообще необходимо (нужно это проверить, они еще не закончили со своей частью).


person olle.holm    schedule 03.09.2020    source источник
comment
Если вы имеете в виду, как запросить страницу HTTP (S), то, возможно, вы ищете запросы. readthedocs.io/en/master или https://github.com/encode/httpx   -  person lsabi    schedule 04.09.2020
comment
Нет наоборот хочу сваливать то, что приходит в порт. Веб-браузер - лишь один из примеров. Как я хотел бы иметь возможность сбрасывать другой запрос для другого протокола.   -  person olle.holm    schedule 04.09.2020
comment
Кроме HTTP (S)? Я не думаю, что это возможно, поскольку uvicorn - это HTTP-сервер. Вероятно, какой-нибудь прокси-сервер перед ним может выполнять такую ​​работу. Иначе я не знаю, как помочь   -  person lsabi    schedule 04.09.2020
comment
Хорошо, но можно ли сбросить необработанный http (s) запрос?   -  person olle.holm    schedule 04.09.2020
comment
Вы можете обработать объект запроса с помощью промежуточного программного обеспечения, см. fastapi.tiangolo.com/tutorial/middleware fastapi.tiangolo.com/advanced/middleware и starlette.io/middleware. Хотя необработанный запрос получить с помощью python довольно сложно. Может быть, есть библиотека, которая может взять объект запроса и преобразовать его, но я никогда об этом не слышал   -  person lsabi    schedule 04.09.2020
comment
Привет, @ olle.holm, не могли бы вы обновить свой вопрос, указав на самом деле, что вы пытаетесь сделать, я буду рад помочь.   -  person Yagiz Degirmenci    schedule 05.09.2020
comment
@YagizcanDegirmenci Я обновил его сейчас, надеюсь, он более понятен. Они еще не закончили с этой частью, поэтому просто хочу начать подготовку, чтобы я был готов, когда получу ее.   -  person olle.holm    schedule 05.09.2020
comment
@ olle.holm Ага, теперь все ясно, проверьте мой ответ.   -  person Yagiz Degirmenci    schedule 05.09.2020


Ответы (1)


Думаю, вы ищете запрос.

Он содержит много информации (включая текст, форму, заголовки и т. Д.) О запросе.

from fastapi import FastAPI, Request

app = FastAPI()


@app.get("/")
def read_root(request: Request):
    print(request.headers)
    return {}

Итак, теперь, если я отправлю запрос на эту конечную точку, это вернет мне

{
    "host":"127.0.0.1:8000",
    "connection":"keep-alive",
    "accept":"application/json",
    "sec-fetch-site":"same-origin",
    "sec-fetch-mode":"cors",
    "sec-fetch-dest":"empty",
    "referer":"http://127.0.0.1:8000/docs",
    "accept-encoding":"gzip, deflate, br",
    "accept-language":"en-US,en;q=0.9,tr;q=0.8",
    "cookie":"csrftoken=sdf6ty78uewfıfehq7y8fuq; _ga=GA.1.11242141,1234423"
}

Затем вы можете извлечь подтверждение из request.headers.

Если вам нужно только это, вы также можете сделать

@app.get("/")
def read_root(request: Request):
    print(request.headers['accept'])
    return {}

Это вернет только

Out: application/json
person Yagiz Degirmenci    schedule 04.09.2020