首页 >后端开发 >Python教程 >如何使用 Python 的请求库发送包含文件和表单数据的多部分/表单数据?

如何使用 Python 的请求库发送包含文件和表单数据的多部分/表单数据?

Barbara Streisand
Barbara Streisand原创
2024-12-13 12:25:13400浏览

How to Send Multipart/Form-Data with Files and Form Data Using Python's Requests Library?

在 Python 中使用请求发送 Multipart/Form-Data

Multipart/form-data 是一种请求格式,允许表单数据和要在单个请求中发送的文件。要在 Python 中的请求中使用此格式,请指定一个 files 参数,该参数应该是一个字典,其中键是表单数据参数名称,值是文件路径或包含文件内容的元组。

以下示例演示发送文件和文本表单值:

import requests

files = {'file_field': 'path/to/file.ext', 'text_field': 'text_value'}

response = requests.post('http://example.com/upload', files=files)

控制文件名和内容Type

您可以通过使用元组作为文件字典中的值来控制每个部分的文件名和内容类型。该元组应包含 2 到 4 个元素,如下所示:

  • 元素 1: 文件名(可选)
  • 元素 2: 内容
  • 元素 3(可选): 内容type
  • 元素 4(可选): 额外标头

例如,要指定文本值的文件名和内容类型:

files = {'text_field': (None, 'text_value', 'text/plain')}

指定多个相同的字段名称

要发送多个同名字段,请使用元组列表作为文件字典中的值。

使用 Requests-Toolbelt 实现高级多部分支持

requests-toolbelt 项目提供了高级的 Multipart 支持。与请求不同,它默认不设置文件名参数,并允许从打开的文件对象流式传输字段。

这是使用 requests-toolbelt 的示例:

from requests_toolbelt.multipart.encoder import MultipartEncoder

mp_encoder = MultipartEncoder(
    fields={
        'file_field': ('file.ext', open('path/to/file.ext', 'rb'), 'application/octet-stream'),
        'text_field': 'text_value',
    }
)

response = requests.post(
    'http://example.com/upload',
    data=mp_encoder,
    headers={'Content-Type': mp_encoder.content_type}
)

以上是如何使用 Python 的请求库发送包含文件和表单数据的多部分/表单数据?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn