【发布时间】:2015-06-07 12:17:45
【问题描述】:
我已成功使用requests 模块上传二进制文件(jpg),内容如下:
upload_url = 'http:10.1.1.1:8080/api/media/photo'
headers = {'Authorization': token_string, 'Content-Type': 'image/jpg'}
data = open('photo.JPG', 'rb')
params = {'name': 'photo.JPG'}
r = requests.post(upload_url, params=params, data=data, headers=headers)
现在尝试使用aiohttp 客户端执行此操作。这是我目前所拥有的:
def upload_photos(token):
upload_url = '10.0.1.1:8080/api/media/photo'
headers = {'Authorization': token, 'Content-Type': 'image/jpg'}
data = {'file': open('photo.JPG', 'rb')}
params = {'name': 'photo.JPG'}
r = yield from aiohttp.request('post', upload_url, params=params, data=data, headers=headers)
if __name__ == '__main__':
asyncio.get_event_loop().run_until_complete(upload_photos(token))
但我得到了 400 的回报,{"detail": "Specified value is invalid: Invalid Content-Length specified"}。
好像它没有正确发送photo.jpg。 aiohttp 文档提到了多部分编码文件和流式传输,但这不是我想要的。
如何在请求中形成类似的带有二进制文件的 POST,但使用 aiohttp?
【问题讨论】:
标签: python-3.x http-post python-requests python-asyncio aiohttp