{“错误”:“不支持Content-Type标头[]”,“状态”:406}使用Golang将数据插入Elasticsearch时

时间:2018-11-15 10:42:25

标签: elasticsearch go header content-type

有人知道如何解决此错误吗?

我使用Golang将数据插入Elasticsearch,但是由于该错误,似乎没有数据插入。

  

{“错误”:“不支持Content-Type标头[]”,“状态”:406}

我已经设置了内容类型。请注意,我使用elasticsearch 6.4.3

request, err := http.NewRequest("POST", urlSearch, bytes.NewBuffer(query))
            request.Close = true
            request.Header.Set("Content-Type", "application/json")

最后但并非最不重要的一点是,我使用elastigo软件包向elasticsearch发出请求。

1 个答案:

答案 0 :(得分:0)

这是一个奇怪的回答,因为它暗示了这一行:

request.Header.Set("Content-Type", "application/json")

无法将值添加到键片中。在现代情况下,这种情况不会发生,例如

data := []byte(`{"a":1}`)
req, err := http.NewRequest("POST", "", bytes.NewBuffer(data))
if err != nil {
    fmt.Println(err)
    return
}
req.Header.Set("Foo", "Bar")
fmt.Printf("%v\n", req.Header)

打印

map[Foo:[Bar]]

请参见go playground

您是否正在使用与该行为不匹配的旧版Go? (我在本地使用1.11.2。)

五个建议:

(1)处理来自NewRequest的err返回值,以确认那里没有问题(请参见上面的示例)。

(2)在发送之前打印请求Header的值,以确认它在那时正确(请参见上面的示例)。

(3)尝试使用the Add method作为Content-Type标头,而不要使用Set作为替代:

func (h Header) Add(key, value string)

(4)确认您没有通过剥离标题值的代理。

(5)验证“ application / json”是否是您要命中的端点的可接受的内容类型,因为错误响应中的空值本身可能是错误的。

祝你好运!