我正在使用Python 2.7
。
我想使用HTTP POST
制作requests
,我在其中上传文件和必须放在HTTP Headers
中的密钥。
在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
发送任何图像时相同的行为。看起来有效负载字符串没有正确发送。
问题:
此Postman
自动生成代码有什么问题,以便HTTP POST
同时向image upload
header
和Python
发送
logging.getLogger('parso.cache').disabled=True
logging.getLogger('parso.cache.pickle').disabled=True
?
答案 0 :(得分:1)
我认为Postman正在做一些我们并不知道的逻辑。但是包requests
提供了上传图片的方式。
files = {'media': open('my_image.jpg', 'rb')}
r = requests.post(url, files=files, headers=hearders)
根据您要将图像发送到的服务器,参数名称,此代码可能需要稍作更改。
答案 1 :(得分:0)
这里唯一的技巧是您的代码应该与您在邮递员中发布请求的代码相同,无需添加额外的标头,您的投递请求应该看起来与在邮递员中的相同。 为此,我可以将文件更改为图像文件,然后将其发布到我的发布请求中。
with open('grass-small.png', 'rb') as imageFile:
imageStr = base64.urlsafe_b64encode(imageFile.read())
files = {'document': ('grass-small.png', imageStr ), 'document_type':(None,'grass')}
答案 2 :(得分:0)
这对我有用
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)