requestsを使ってmultipart/form-data形式でファイル送信

Requests では、files パラメータを指定すれば、簡単に multipart/form-data 形式でファイルを送信できます。

以下は、単一ファイルを送信する例です。 キーはフォーム要素の名前、値はファイル名、ファイルオブジェクト、メディアタイプを含むタプルです。

import requests

url = 'http://127.0.0.1:5000/upload'
files = {'inputFiles': (
    'a.pdf',
    open('a.pdf', 'rb'),
    'application/pdf'
)}
r = requests.post(url, files=files)

複数ファイルを送信する場合:

multiple_files = [
    ['inputFiles', [
        'a.pdf',
        open('a.pdf', 'rb'),
        'application/pdf'
    ]],
    ['inputFiles', [
        'b.png',
        open('b.png', 'rb'),
        'image/png'
    ]]
]
r = requests.post(url, files=multiple_files)

YAML ファイルにて入力ファイルを指定し、Python に読み込ませる場合、以下のようになります。

- name: multipart_request
  url: http://127.0.0.1:5000/upload
  request:
    method: POST
    files:
      - - inputFiles
        - - a.pdf
          - /home/ubuntu/a.pdf
          - application/pdf
      - - inputFiles
        - - b.png
          - /home/ubuntu/b.png
          - image/png
import yaml
import requests


def parse_files(files):
    for f in files:
        fp = f[1][1]
        fileobj = open(fp, 'rb')
        f[1][1] = fileobj
    return files


with open('test.yaml') as f:
    config = yaml.safe_load(f)

url = config[0]['url']
req_files = config[0]['request']['files']
multiple_files = parse_files(req_files)
r = requests.post(url, files=multiple_files)

Tags:

Updated: