python - 如何使用 Python 使用 multi/form-data 发出 POST 请求?
问题描述
我对 API 的东西很陌生。
我必须使用以下“格式”向 API 发出 POST 请求
content-type: multipart/form-data
Content-Disposition: form-data; name=""; filename=""
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Form data:
file = file.xlsx
如何使用 Python 执行 API 请求?
使用请求库,我可以执行它:
requests.post(
'api_url',
headers = {'Content-Type':'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'},
data = {"filename.xlsx": open(filepath, "rb")}
)
谢谢
解决方案
我更喜欢池管理器,因为它可以轻松管理超时、重试等:
import urllib3
from urllib3.util import Retry, Timeout
http_client = urllib3.PoolManager(retries=Retry(connect=5, read=2, redirect=5),
timeout=Timeout(connect=5.0, read=10.0),
num_pools=2)
data = {'asd': 'asd'}
request = http_client.request('POST', "http://localhost:8081", fields=data, encode_multipart=True)
这会给你:
>nc -l 127.0.0.1 8081
POST / HTTP/1.1
Host: localhost:8081
Accept-Encoding: identity
Content-Length: 125
Content-Type: multipart/form-data; boundary=6ce0c07687204c761cc1e5a6d6f6046e
User-Agent: python-urllib3/1.26.4
--6ce0c07687204c761cc1e5a6d6f6046e
Content-Disposition: form-data; name="asd"
asd
--6ce0c07687204c761cc1e5a6d6f6046e--
推荐阅读
- asp.net-core - 只为自定义日志写入日志
- static-analysis - 使用 clang-tidy 时忽略某些文件
- android - android Retrofit中的动态JSON解析?
- linux - 我有多个不同版本的文件名。如何从每个文件名中选择最高编号的版本
- reactjs - goBack() 按钮不起作用。HashRouter 反应
- plot - 单个图上的多个 Y 轴
- .net - 触摸屏上 Windows 窗体应用程序的本机控件?
- php - 测试要为用户显示的错误消息
- c++ - C++20 范围适配器的递归应用导致编译时无限循环
- gml - GMS2 - 为什么我会收到此语法错误?