web-dev-qa-db-fra.com

L'en-tête Content-Type [application / x-www-form-urlencoded] n'est pas pris en charge

J'ai intégré Elasticsearch (Version 5.5) dans Gitlab et j'essaie de l'utiliser. Voici la commande que j'envoie à partir d'un client Windows externe:

curl -XGET gitlab.server:9200/ -H 'Content-Type: application/json' -d '{"query": {"simple_query_string" : {"fields" : ["content"], "query" : "foo bar -baz"}}}'

mais ça ne marche pas. Sur le client, je reçois ces erreurs:

{"error": "L'en-tête Content-Type [application/x-www-form-urlencoded] n'est pas pris en charge", "status": 406}
curl: (6) Impossible de résoudre l'hôte: texte
curl: (3) [globbing] accolade inégalée dans la colonne 1
curl: (3) URL incorrecte, deux points est le premier caractère
curl: (3) [globbing] accolade inégalée dans la colonne 1
curl: (3) URL incorrecte, deux points est le premier caractère
curl: (3) [globbing] mauvaise plage dans la colonne 2
curl: (6) Impossible de résoudre l'hôte: requête
curl: (3) URL incorrecte, deux points est le premier caractère
curl: (3) [globbing] accolade/support de fermeture inégalé dans la colonne 13

Sur le serveur dans /var/log/elasticsearch/elasticsearch.log, je ne vois aucun message de journal.

Cependant, l'exécution de la même commande exacte que ci-dessus à partir du serveur Linux me donne une réponse sans erreur:

{
  "name" : "name",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "uuid",
  "version" : {
    "number" : "5.5.0",
    "build_hash" : "260387d",
    "build_date" : "2017-06-30T23:16:05.735Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.0"
  },
  "tagline" : "You Know, for Search"
}

J'ai essayé d'ajouter http.content_type.required: true à elasticsearch.yml, mais le problème était le même. Alors, qu'est-ce que je fais mal ici? Pourquoi est-ce que j'obtiens un "en-tête Content-Type non pris en charge" du client Windows? Comment puis-je résoudre ça?

Après avoir changé le 'en "comme ceci:

curl -XGET gitlab.server:9200/ -H "Content-Type: application/json" -d "{"query": {"simple_query_string" : {"fields" : ["content"], "query" : "foo bar -baz"}}}"

Je reçois cette réponse:

{
  "name" : "name",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "uuid",
  "version" : {
    "number" : "5.5.0",
    "build_hash" : "260387d",
    "build_date" : "2017-06-30T23:16:05.735Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.0"
  },
  "tagline" : "You Know, for Search"
}
curl: (6) Could not resolve Host: bar
9
waka

Après avoir modifié les guillemets fermants de ' à ", échappez aux guillemets " utilisé dans les paramètres comme ci-dessous:

curl -XGET gitlab.server:9200/ -H "Content-Type: application/json" -d "{\"query\": {\"simple_query_string\" : {\"fields\" : [\"content\"], \"query\" : \"foo bar -baz\"}}}"

Un alternative consiste à mettre le json dans un fichier et à utiliser le @ préfixe des paramètres.

json.txt

{
  "query": {
    "simple_query_string" : { 
      "fields" : ["content"], 
      "query" : "foo bar -baz"
    }
  }
}

et exécutez curl comme ci-dessous:

curl -XGET gitlab.server:9200/ -H "Content-Type: application/json" -d @json.txt
21
Bless