繁体   English   中英

Python HTTP Post,其中包含从Postman生成的上传文件和标头

[英]Python HTTP Post with upload file and headers generated from Postman

我正在使用Python 2.7

我想使用requests进行HTTP POST ,在该requests中上传文件和必须放在HTTP Headers的密钥。

为此,我使用了Postman应用程序,它在这里确实可以正常工作。 邮递员的例子

Postman我仅添加了必要的标头,即带有某些密钥的Authorization body ,我选择了form-data ,然后键是一个input_image ,它们就是图像本身。

现在,我想将其复制到Python2.7 ,所以我选择在Postman上查看Python代码,它就是这样的代码:

import requests

url = "https://foo.com/bar/stuff"

payload = "------WebKitFormBoundary7MA4YDxkTrZu1gW\r\nContent-Disposition: form-data; name=\"input_image\"; filename=\"C:\\Test\\projs\\Supermarket\\doritos.jpeg\"\r\nContent-Type: image/jpeg\r\n\r\n\r\n------WebKitFormBoundary7MA4YDxkTrZu1gW--"
headers = {
    'content-type': "multipart/form-data; boundary=----WebKitFormBoundary7MA4YDxkTrZu1gW",
    'Authorization': "myAuthorizationKey",
    'Cache-Control': "no-cache",
    'Postman-Token': "0efwd6e8-051c-4ed5-8d6f-7b1bd135f4d5"
    }

response = requests.request("POST", url, data=payload, headers=headers)

print(response.text)

这根本行不通。 它具有与我没有使用Postman发送任何图像相同的行为。 看来负载字符串未正确发送。

题:

为了在Python同时发送带有image uploadheaderHTTP POST ,此Postman自动生成代码有什么问题?

我认为Postman正在做一些我们并未真正意识到的逻辑。 但是打包requests提供了一种上传图像的方法。

files = {'media': open('my_image.jpg', 'rb')}
r = requests.post(url, files=files, headers=hearders)

根据要将图像发送到的服务器(参数名称),此代码可能需要稍作更改。

唯一有用的技巧是您的代码应与邮递员中的发布请求相同,无需添加额外的标头,您的邮寄请求应与在邮递员中看起来相同。 我可以通过将文件更改为图像文件,然后将其发布到我的发布请求中来做到这一点。

    with open('grass-small.png', 'rb') as imageFile:
        imageStr = base64.urlsafe_b64encode(imageFile.read())
    files = {'document': ('grass-small.png', imageStr ), 'document_type':(None,'grass')}

这对我有用

import requests

url = 'http://iizuka.cs.tsukuba.ac.jp/projects/colorization/web/'
files = {'file': ("my_img_path/myImage.jpeg", open('my_img_path/myImage.jpeg', 'rb'),'image/jpg')}

r = requests.post(url, files=files)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM