x-www-form-urlencoded
application/x-www-form-urlencoded
和
application/json
是两种不同的 HTTP 请求体格式,它们在 Python 中的处理方式也不同。
application/x-www-form-urlencoded
是 Web 表单默认的提交方法,浏览器会将表单数据编码为 key-value 键值对,并将其放在请求体中。该格式数据可以通过 Python 中的标准库
urllib.parse
进行解析,例如:
from urllib.parse import parse_qs
# 请求体数据
data =b'name=John&age=30'# 从请求体中解析出表单数据
form_data = parse_qs(data.decode())
此时
form_data
的结果为:
{'name': ['John'], 'age': ['30']}
而
application/json
是一种常用的数据格式,在这种格式下,请求体中的数据会被编码成 JSON 格式,并放在请求体中,需要使用
json
库进行解析。例如:
import json
# 请求体数据
data =b'{"name": "John", "age": 30}'# 从请求体中解析出 JSON 数据
json_data = json.loads(data)
此时
json_data
的结果为:
{'name': 'John', 'age': 30}
综上所述,
application/x-www-form-urlencoded
和
application/json
的处理方式有所不同,需要根据实际情况进行选择和使用。
form-data
multipart/form-data
是一种比较常见的 HTTP 请求体格式,常用于对二进制或文本文件进行上传。这种格式不同于
application/x-www-form-urlencoded
,它可以在请求体中传输二进制数据,也就是允许上传文件。
在 Python 中,处理
multipart/form-data
类型的请求体可以使用
requests
库中的
post
方法。例如:
import requests
# 文件路径
file_path ='example.jpg'# 发送 POST 请求
response = requests.post('http://example.com/upload',
files={'file':open(file_path,'rb')})
在这个例子中,我们使用
requests
库的
post
方法发送一个
multipart/form-data
类型的 POST 请求,上传指定路径下的文件。使用字典形式的
files
参数来传递上传的文件,字典的 key 为提交数据的字段名称,字典的 value 为文件对象(使用 Python 内置
open()
函数打开文件对象)。
如果请求体中包含了其他的表单数据,可以使用字典形式的
data
参数来传递这些数据,类似于
application/x-www-form-urlencoded
的格式。示例:
import requests
# 文件路径和其他表单数据
file_path ='example.jpg'
data ={'name':'John','age':'30'}# 发送 POST 请求
response = requests.post('http://example.com/upload',
files={'file':open(file_path,'rb')},
data=data
)
在此例子中,我们除了上传文件之外,还将一个包含姓名和年龄的表单数据一并上传。字典形式的
data
参数用来传递这些数据。
requests库post请求参数data、json和files的使用
参考:https://blog.csdn.net/qq_31699845/article/details/124849600
传文件和表单示例
如果要传文件,可以使用
requests
库的
files
参数来实现文件上传。使用
files
参数,它将自动采用
multipart/form-data
格式来编码请求体数据。
下面是一个例子,展示如何在客户端发送文件上传请求,包括一个文件和一些文本数据:
import requests
url ='http://localhost:8000/upload'
files ={'file':open('example.txt','rb')}
data ={'name':'John','age':'30','gender':'Male'}
response = requests.post(url, files=files, data=data)print(response.text)
在上面的代码中,我们向
http://localhost:8000/upload
发送了一个
POST
请求。
files
参数是一个字典类型。字典的键就是表单字段名,值可以是字符串或者文件字节。在上面的代码中,
example.txt
是一个需要上传的文本文件。表单中的其他数据采用了
data
参数传递,也是一个字典类型。
在服务端,我们可以使用 FastAPI 框架来解析上传的文件和表单数据:
from fastapi import FastAPI, File, Form, UploadFile
app = FastAPI()@app.post("/upload")asyncdefcreate_upload_file(file: UploadFile = File(...), name:str= Form(...), age:int= Form(...), gender:str= Form(...)):
content =awaitfile.read()return{"filename":file.filename,"name": name,"age": age,"gender": gender}
在上面的代码中,我们定义了一个
/upload
的路由,使用了 FastAPI 框架。使用
UploadFile
类型解析上传的文件,使用
Form
类型解析表单中的其他数据。在
create_upload_file
函数中,使用了
file.read()
方法来获得上传文件的内容。可以将上传文件的文件名、表单中的其他数据返回给客户端。
在本例中,客户端将文件和表单数据一起发送到服务器,而服务器使用
UploadFile
和
Form
类型来解析它们。FastAPI 框架允许我们很容易地把所有这些格式的请求数据都组合在一起。”
希望这个例子能够帮助你。
版权归原作者 愚昧之山绝望之谷开悟之坡 所有, 如有侵权,请联系我们删除。