python - .txt 文件的 POST 请求
问题描述
我无法编写可以通过 POST 请求获取 .txt 文件的函数。
我有一个 .txt 文件,其中包含以下短语:Hello World!
服务器端:
from fastapi import FastAPI, File
from starlette.requests import Request
import io
app = FastAPI()
@app.post("/post_text_file")
def text_function(request: Request,
file: bytes = File(...)):
text = open(io.BytesIO(file), "r").read()
return text # Hello World!
客户端:
import requests
url = 'http://localhost:8000/post_text_file'
r = requests.post(url,data=open('Hello World.txt'))
在运行命令 uvicorn main:app 并在客户端运行代码后,我得到下一个答案:
在客户端:{'detail': 'There was an error parsing the body'}
在服务器端:“POST /post_text_file HTTP/1.1”400 错误请求
解决方案
requests.post有一个files
参数,您可以使用它来发送文件,如下所示:
import requests
url = "http://localhost:8000/post_text_file"
fin = open('Hello World.txt', 'rb')
files = {'file': fin}
try:
r = requests.post(url, files=files)
finally:
fin.close()
通常,随您的请求发送的文件可以request.files
作为上传文件的字典进行访问。
推荐阅读
- python - 使用 .groupby 和 .transform 进行聚合
- c# - 复合外键作为主键
- android - 我想在 Polyline googlemap Android 上显示距离
- reactjs - 无法在反应中显示来自发布请求的响应
- bash - .gitignore 默认情况下将全部黑名单和手动白名单模式不起作用
- git - git-lfs:如何强制安装 git lfs?
- visual-studio - UWP 商店应用程序过期证书未由“将应用程序与商店关联”更新
- shell - 如果其他条件匹配语句在 jenkinsfile 的外壳中不起作用
- c - “__schedule”函数中的“current”和“prev”有什么区别,为什么不直接使用current呢?
- node.js - 如何在 .ejs 模板中显示错误