Python请求多个表单文件post
我有下面的cURL请求,我想将表单文件模拟到请求API中Python请求多个表单文件post,python,python-requests,Python,Python Requests,我有下面的cURL请求,我想将表单文件模拟到请求API中 curl --request POST \ --url http://localhost:3000/convert/html \ --header 'Content-Type: multipart/form-data' \ --form files=@index.html \ --form files=@header.html \ --form files=@footer.html \ -o
curl --request POST \
--url http://localhost:3000/convert/html \
--header 'Content-Type: multipart/form-data' \
--form files=@index.html \
--form files=@header.html \
--form files=@footer.html \
-o result.pdf
我目前的代码是:
files = {
"files": [
("header.html", io.BytesIO(header)),
("index.html", io.BytesIO(html)),
("footer.html", io.BytesIO(footer)),
]
}
response = requests.post(url, files=files)
如何使用请求将多个文件传递到表单中
File "main.py", line 39, in main
response = requests.post(url, files=files)
File "/home/ubuntu/workspace/report/venv/lib/python3.8/site-packages/requests/sessions.py", line 590, in post
return self.request('POST', url, data=data, json=json, **kwargs)
File "/home/ubuntu/workspace/report/venv/lib/python3.8/site-packages/requests/sessions.py", line 528, in request
prep = self.prepare_request(req)
File "/home/ubuntu/workspace/report/venv/lib/python3.8/site-packages/requests/sessions.py", line 456, in prepare_request
p.prepare(
File "/home/ubuntu/workspace/report/venv/lib/python3.8/site-packages/requests/models.py", line 319, in prepare
self.prepare_body(data, files, json)
File "/home/ubuntu/workspace/report/venv/lib/python3.8/site-packages/requests/models.py", line 507, in prepare_body
(body, content_type) = self._encode_files(files, data)
File "/home/ubuntu/workspace/report/venv/lib/python3.8/site-packages/requests/models.py", line 166, in _encode_files
rf.make_multipart(content_type=ft)
File "/home/ubuntu/workspace/report/venv/lib/python3.8/site-packages/urllib3/fields.py", line 268, in make_multipart
self._render_parts(
File "/home/ubuntu/workspace/report/venv/lib/python3.8/site-packages/urllib3/fields.py", line 226, in _render_parts
parts.append(self._render_part(name, value))
File "/home/ubuntu/workspace/report/venv/lib/python3.8/site-packages/urllib3/fields.py", line 206, in _render_part
return self.header_formatter(name, value)
File "/home/ubuntu/workspace/report/venv/lib/python3.8/site-packages/urllib3/fields.py", line 117, in format_header_param_html5
value = _replace_multiple(value, _HTML5_REPLACEMENTS)
File "/home/ubuntu/workspace/report/venv/lib/python3.8/site-packages/urllib3/fields.py", line 90, in _replace_multiple
result = pattern.sub(replacer, value)
TypeError: expected string or bytes-like object
其中一个选项将起作用: 作为字典发送:
files_as_dict={'file1':("file1",open('out.png', 'rb'),'image/png'),
'file2':("file2",open('out.png', 'rb'),'image/png')
}
第二个发送方式列表:
files_as_list = [('file', open('out.png', 'rb')), ('file', open('out.png', 'rb'))]
所以post请求将是
response = requests.request("POST", url, headers=headers, files=files_as_dict)
#or
#response = requests.request("POST", url, headers=headers, files=files_as_list)
解决
files = [
("files", ("header.html", io.BytesIO(header))),
("files", ("index.html", io.BytesIO(html))),
("files", ("footer.html", io.BytesIO(footer))),
]