假设有一个端点接受HTTP
请求与multipart/form-data
内容类型。以下是可接受的请求正文的示例。
----------------------------033392576939750140334380
Content-Disposition: form-data; name="file" filename="dummy_file.txt"
Some dummy file here.
----------------------------033392576939750140334380
Content-Disposition: form-data; name="years"
2019
----------------------------033392576939750140334380
Content-Disposition: form-data; name="years"
2020
----------------------------033392576939750140334380
正如您所看到的,有一组数字正在使用years
关键词。
问题是我们如何使用发送相同的请求requests
图书馆在python
?
因此这似乎很棘手years
array.
我尝试过通过这些方式发送。
requests.post(
"http://some.site/some-endpoint/",
files={
"years": [2019, 2020],
"file": ("dummy_file.txt", open("dummy_file.txt", "rb")),
},
)
不去上班——TypeError: a bytes-like object is required, not 'list'
.
requests.post(
"http://some.site/some-endpoint/",
files={
"years": (None, "2019, 2020"),
"file": ("dummy_file.txt", open("dummy_file.txt", "rb")),
},
)
给出以下请求正文。
--88c0aa2588fb3ca9b1e3c9c6cf625677
Content-Disposition: form-data; name="years"
2019, 2020
--88c0aa2588fb3ca9b1e3c9c6cf625677
Content-Disposition: form-data; name="file"; filename="dummy_file.txt"
Some dummy file here.
--88c0aa2588fb3ca9b1e3c9c6cf625677--
The years
数组在这里表示为字符串值,这对于这种情况是不行的。
requests.post(
"http://some.site/some-endpoint/",
files={
"years[0]": (None, "2020"),
"years[1]": (None, "2019"),
"file": ("dummy_file.txt", open("dummy_file.txt", "rb")),
},
)
给出以下请求正文。
--989f55fc01395402654f4275d11e8735
Content-Disposition: form-data; name="years[0]"
2020
--989f55fc01395402654f4275d11e8735
Content-Disposition: form-data; name="years[1]"
2019
Content-Disposition: form-data; name="file"; filename="dummy_file.txt"
Some dummy file here.
--989f55fc01395402654f4275d11e8735
这样中的每个元素years
数组由不同的表示name
,这也不适合这种特殊情况。
如果我们检查最后一次尝试,似乎我们可以通过发送每个值来实现所需的主体结构years
使用相同的数组years
关键词。但这是行不通的requests
as the files
属性接受dict
只允许唯一键的对象。
那么,我们如何实现这一目标requests
module?