使用Python请求中的POST表单数据上载Image

问题描述 投票:19回答:5

我正在使用微信API ...在这里我要使用这个API将图像上传到微信服务器http://admin.wechat.com/wiki/index.php?title=Transferring_Multimedia_Files

    url = 'http://file.api.wechat.com/cgi-bin/media/upload?access_token=%s&type=image'%access_token
    files = {
        'file': (filename, open(filepath, 'rb'),
        'Content-Type': 'image/jpeg',
        'Content-Length': l
    }
    r = requests.post(url, files=files)

我无法发布数据

python python-3.x curl python-requests wechat
5个回答
36
投票

来自wechat api doc:

curl -F [email protected] "http://file.api.wechat.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE"

将上面的命令翻译为python:

import requests
url = 'http://file.api.wechat.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE'
files = {'media': open('test.jpg', 'rb')}
requests.post(url, files=files)

3
投票
import requests

image_file_descriptor = open('test.jpg', 'rb')
url = '...'
requests.post(url, files=files)
image_file_descriptor.close()

不要忘记关闭描述符,它可以防止错误:Is explicitly closing files important?


2
投票

当我想将图像文件从Python发布到其他API时,我遇到了类似的问题(虽然不是微信API)。我的解决方案是使用'data'参数将文件发布到二进制数据而不是'files'。 Requests API reference

data = open('your_image.png','rb').read()
r = requests.post(your_url,data=data)

希望这适用于您的情况。


1
投票

使用Rest API将图像从主机上传到主机:

import urllib2
import requests

api_host = 'https://host.url.com/upload/'
headers = {'Content-Type' : 'image/jpeg'}
image_url = 'http://image.url.com/sample.jpeg'

img_file = urllib2.urlopen(image_url)

response = requests.post(api_host, data=img_file.read(), headers=headers, verify=False)

您可以使用选项验证设置为False来省略HTTPS请求的SSL验证。


0
投票

使用此代码段

import os
import requests
url = 'http://host:port/endpoint'
with open(path_img, 'rb') as img:
  name_img= os.path.basename(path_img)
  files= {'image': (name_img,img,'multipart/form-data',{'Expires': '0'}) }
  with requests.Session() as s:
    r = s.post(url,files=files)
    print(r.status_code)
© www.soinside.com 2019 - 2024. All rights reserved.