Elastic Search故障:POST/PUT请求因Content-Type不支持报错
解决Elasticsearch POST/PUT请求的Content-Type报错问题
这个问题我之前也碰到过,其实根源很明确——Elasticsearch默认只接受application/json格式的请求体,而你的请求里自动带上了application/x-www-form-urlencoded的Content-Type头,这不符合它的要求,所以返回了406不支持的错误。
下面分几种常见场景给你解决方案:
1. 用curl命令发送请求的情况
你需要显式指定Content-Type为application/json,正确的请求写法应该是这样:
curl -X POST "http://你的ES地址:9200/bird/admin/1" -H "Content-Type: application/json" -d '{ "id":"1", "ity":"BSP" }'
注意两个关键点:
- 必须加上
-H "Content-Type: application/json"来指定请求格式 - 请求体要用单引号包裹,避免shell解析JSON里的双引号出问题
2. 用Postman/Insomnia这类可视化工具的情况
操作起来更直观:
- 切换到请求的「Headers」标签页
- 添加一条头信息:键为
Content-Type,值为application/json - 到「Body」标签页,选择「raw」格式,然后右侧下拉框选「JSON」,再粘贴你的请求体内容
3. 在代码里发送请求的情况
不管你用Python、Java还是其他语言,核心都是手动设置Content-Type头。举个Python requests库的例子:
import requests url = "http://你的ES地址:9200/bird/admin/1" payload = {"id": "1", "ity": "BSP"} headers = {"Content-Type": "application/json"} # 两种写法都可以:用json参数会自动帮你设置Content-Type response = requests.post(url, json=payload, headers=headers) # 或者手动序列化JSON: # import json # response = requests.post(url, data=json.dumps(payload), headers=headers)
另外补充一句:如果是PUT请求更新文档,同样要遵循这个规则,确保请求头的Content-Type正确设置。
内容的提问来源于stack exchange,提问作者Gopesh
相关产品推荐
相关产品推荐

