【问题标题】:Python: using reuests library for multipart/form-dataPython:对多部分/表单数据使用请求库
【发布时间】:2013-08-01 16:59:47
【问题描述】:

我在这方面相当菜鸟,一直在尝试使用 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)}

我错过了一些简单的东西吗?

附:通过一些冲浪,我找到了一些使用 base urllib2 的解决方案,但这将是我最后的手段,因为 requests 让我可以轻松地做很多事情。

【问题讨论】:

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


    【解决方案1】:

    是的,这是我必须解决的错误。此时最好执行以下操作:

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

    【讨论】:

    • 真的非常感谢.. 从昨天开始我的头发就被扯掉了.. 就像一个魅力
    • 很高兴为您提供帮助。对不起,图书馆很烂。它从未发布,因为我期待我会添加更多内容。唯一好的 API 是 urllib3 中的那个,它只需要以更好的方式公开。
    • 嗨,这仍然被视为错误还是有更好的方法从高级 api 本身实现这一点?
    • 处理这个问题的更好方法是使用 requests-toolbelt。这不是错误,Requests 也不会改变。
    猜你喜欢
    • 2013-03-14
    • 1970-01-01
    • 2012-11-27
    • 2016-12-17
    • 2012-03-16
    • 2016-11-11
    • 2013-02-12
    • 2018-07-02
    • 1970-01-01
    相关资源
    最近更新 更多