java - 无法使用 python requests 模块发送 `multipart/form-data` 请求

标签 java python spring python-requests

我有 Java spring 服务器,要求发送到服务器的请求的 Content-Typemultipart/form-data

我可以使用postman正确向服务器发送请求:

enter image description here

enter image description here

但是,当尝试使用 python3 中的 requests 模块发送请求时,我收到 The current request is not a multipart request 错误。

我的Python代码是:

import requests

headers = {
  'Authorization': 'Bearer auth_token'
}

data = {
  'myKey': 'myValue'
}

response = requests.post('http://127.0.0.1:8080/apiUrl', data=data, headers=headers)
print(response.text)

如果我将 'Content-Type': 'multipart/form-data' 添加到请求的 header ,则错误消息将变为 Could not parse multipart servlet request;嵌套异常为 org.apache.commons.fileupload.FileUploadException:请求被拒绝,因为未找到多部分边界

如何发出与 postman 使用 python 发送的请求相同的请求?

最佳答案

requests 的作者认为这种情况不是 pythonic,因此 requests 本身不支持这种用法。

您需要使用 requests_toolbelt,它是由 requests 核心开发团队 doc 的成员维护的扩展。 ,例如:

import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder

m = MultipartEncoder(
    fields={'field0': 'value', 'field1': 'value',
            'field2': ('filename', open('file.py', 'rb'), 'text/plain')}
    )

r = requests.post('http://httpbin.org/post', data=m,
                  headers={'Content-Type': m.content_type})

关于java - 无法使用 python requests 模块发送 `multipart/form-data` 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51034490/

相关文章:

java - Jenkins-Traub算法开源java移植?

python - 如何让 GridSearchCV 在我的管道中使用自定义转换器?

python - Python 中带有 4 个面板 (2 x 2) 的 Seaborn 直方图

java - Spring :用 <list/> 进行干燥。将所有值从列表复制到列表

java - Mockito 使用 spring mvc 注入(inject)抛出 NotAMockException

java - 执行环境描述、标准 1.1x VM 和标准 VM 之间有什么区别

java - java中如何对超出double数据类型范围的值进行计算?

python - 如何在python中将视频转换为m4v格式而不保存到文件

java - 如何进行 OAuth 2 API 调用并获取响应

Java/Android 添加 2 个字节(如何告诉编译器它不会超过 127?)