首页 > 解决方案 > 如何使用 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")}
)

谢谢

标签: pythonapi

解决方案


我更喜欢池管理器,因为它可以轻松管理超时、重试等:

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--

推荐阅读