Python请求多个表单文件post

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请求,我想将表单文件模拟到请求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 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))),
]