将多部分图像发布到api

时间:2014-09-26 19:04:08

标签: python python-2.7

邮递员发帖:

请求有效负载:

------WebKitFormBoundaryiPTu5XrX314NHpan
Content-Disposition: form-data; name="photo"; filename="example1.jpg"
Content-Type: image/jpeg


------WebKitFormBoundaryiPTu5XrX314NHpan--

标题:

Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryiPTu5XrX314NHpan

需要从python应用程序发送图像,但每次都会收到400错误。

尝试:

req = urllib2.Request(photoURL, None, {'User-agent' : 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5'})
imgFile = cStringIO.StringIO(urllib2.urlopen(req).read())
datagen, headers = multipart_encode({"photo": Image.open(imgFile)})
request = urllib2.Request(postPhotoAPI, datagen, headers)
request.add_header("Authorization", authKey)
urllib2.urlopen(request).read()

结果:400

在requests.post和其他一些post函数(也适用于base64)中相同。

1 个答案:

答案 0 :(得分:2)

当我想用python进行http调用时,我总是使用python requests库。

你需要做这样的事情:

files = {'photo': ('image.png', open('image.png', 'rb'), 'image/png')}
r = requests.post(photoURL, header={'User-agent' : 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5', 'Authorization': authKey} files=files)
print r.text

您可以阅读更多here