最近在学习ES,在批量上传数据的时候卡住了,requests上传文件的时候一般用的是
url = 'http://127.0.0.1:9200/_bulk' files = { "field" : open(filename, mode='rb') } requests.post(url, data=files, headers={'Content-Type':'binary'})但是上传的过程中ES一直报错,信息如下
{"error":{"root_cause":[{"type":"parse_exception","reason":"Failed to derive xcontent"}],"type":"parse_exception","reason":"Failed to derive xcontent"},"status":400}但是利用postman的binary上传时却是正确的,如下图
多方查找后并没有结果,后来去requests的官方文档上找到了一种解决方式:
with open(filename, 'rb') as f: r = requests.post(url, data=f)原文:
Requests supports streaming uploads, which allow you to send large streams or files without reading them into memory. To stream and upload, simply provide a file-like object for your body:
with open('massive-body', 'rb') as f: requests.post('http://some.url/streamed', data=f)