Python:将请求库用于multipart / form-data

时间:2013-07-31 23:27:40

标签: python python-2.7 multipartform-data python-requests

我在这方面相当不错,并且一直在尝试将requests模块用于post多部分/表格数据。为了澄清,我尝试使用的确切测试用例与https://github.com/kennethreitz/requests/issues/1081中的测试用例相同。即我试图在没有文件的情况下进行post

--3eeaadbfda0441b8be821bbed2962e4d
Content-Disposition: form-data; name="key1"

value1
--3eeaadbfda0441b8be821bbed2962e4d

根据对该主题的讨论,我尝试MultiPart form data scheme执行以下操作:

import requests
from requests_data_schemes import multipart_formdata as mfd
post_data = [('mouseAction', 'toggle'), ('zone' ,'10')]
post_data = mfd(post_data)
headers = {'Content-Type': 'multipart/form-data'}

req = requests.post(<url>, data=post_data, headers=headers)

但是,测试服务器正在向我抛出错误,说它无法检测多部分表单数据的边界。

我也尝试在标题中提供边界,但显然它不起作用。

boundary = post_data[2: post_data.find('\r\n')]
headers = {'Content-Type': 'multipart/form-data; boundary={}'.format(boundary)}

我错过了一些简单的事情吗?

P.S。从一些冲浪我发现了一些使用基础urllib2的解决方案,但这将是我的最后一招,因为requests让我很容易做很多事情。

1 个答案:

答案 0 :(得分:3)

是的,这是我必须解决的错误。此时你做得更好:

from requests.packages.urllib3.filepost import encode_multipart_formdata

(content, header) = encode_multipart_formdata([('key', 'value')])
r = requests.post(url, data=content, headers={'Content-Type': header})