python-requests发送错误的多部分有效负载

时间:2015-09-12 13:30:41

标签: python http flask python-requests

我尝试使用requests包发送多部分POST请求。

以下是代码:

with open("small-car.png", "rb") as image_file:
    encoded_image = "data:image/png;base64,%s" % base64.b64encode(image_file.read())

files = {'img': encoded_image}
r = requests.post(url, files=files)

在服务器端,我依靠以下烧瓶代码对其进行解码:

    data = request.form.to_dict()

但是,data始终是{}。 wireshark的峰值显示如下:

enter image description here

这似乎不对。正确的标题不应包含我认为的filename=xxx部分。

有没有办法调整requests来做正确的事情?

3 个答案:

答案 0 :(得分:0)

我认为你可以做到以下几点:

    data = {'file': files}
    response = requests.put(url=url, data=data)

此外,您可以在烧录代码(import ipdb; ipdb.set_trace())中添加跟踪,并检查在Python中发布的内容,而不是使用wireshark。

答案 1 :(得分:0)

我很确定你的标题是好的。 在flash中单独接收文件

检查一下:http://flask.pocoo.org/docs/0.10/patterns/fileuploads/

if request.method == 'POST':
    file = request.files['file']
    if file and allowed_file(file.filename):
        filename = secure_filename(file.filename)
        file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))

答案 2 :(得分:0)

如果您要排除filename部分,请执行以下操作:

data = {'img': ('', encoded_image)}
requests.post(url, files=data)

元组的第一个元素将被视为文件名,因为它是空的,它将被排除。