Content-type header not supported

I am following this link for elasticsearch.

https://www.elastic.co/blog/a-practical-introduction-to-elasticsearch

I am trying following curl to post the json data.

curl -XPOST "http://localhost:9200/shakespeare/_bulk?pretty" --data-binary @D:\data\shakespeare.json

But I am getting error like below:

{
  "error" : "Content-Type header [application/x-www-form-urlencoded] is not supported",
  "status" : 406
}

Solution 1:

You need to set the content type in the header to application/json:

curl -XPOST -H "Content-Type: application/json" "http://localhost:9200/shakespeare/_bulk?pretty" --data-binary @D:\data\shakespeare.json

Solution 2:

I received the same error after updating from an older version to 6.x.x. I'm not using curl statements directly, I'm using python's elasticsearch plugin.

In my case, I needed to install the newer version of the plugin that corresponded to the updated elasticsearch server.

pip install elasticsearch==6.3.1

Make sure you run it in the same Python Environment that your code is executing in.

Hope this saves someone some headache.

Solution 3:

I found a solution you can set a default header that will overwrite previous header:

RestClient restClient = RestClient
    .builder(new HttpHost(url, port, scheme))
    .setDefaultHeaders(new Header[]{
        new BasicHeader("Content-type", "application/json")
    })
    .build();