1. ホーム
  2. curl

[解決済み] Content-Type ヘッダー [application/x-www-form-urlencoded] はサポートされていません [重複] 。

2022-02-12 11:33:30

質問

Elasticsearch (Version 5.5)をGitlabに統合して使ってみました。これは、外部のWindowsクライアントから送信するコマンドです。

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

が、うまくいきません。クライアントでは、次のようなエラーが発生します。

{"error":"Content-Type header [application/x-www-form-urlencoded] is not supported","status":406}.............................................(以下略
を実行します。(6) ホストを解決できませんでした: text
をクリックします。(3) [グロビング] 列 1 の中括弧が一致しない。
をクリックします。(3) 不正な URL、コロンが最初の文字です。
をクリックします。(3) [グロビング] 列 1 の中括弧が一致しない。
をクリックします。(3) 不正な URL、コロンが最初の文字です。
をクリックします。(3) [グロビング] 列 2 の範囲が不正です。
curl: (6) ホストを解決できませんでした:クエリ
をクリックします。(3) 不正な URL、コロンが最初の文字です。
をカールさせます。(3) [グロビング] 13列目の閉じ中括弧/括弧が一致しない。

サーバーの/var/log/elasticsearch/elasticsearch.logにはログメッセージは見当たりません。

しかし、Linuxサーバーから上記と全く同じコマンドを実行すると、エラーなしで応答が得られます。

{
  "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"
}

を追加してみました。 http.content_type.required: true をelasticsearch.ymlに追加しましたが、問題は同じでした。つまり、私はここで何を間違えているのでしょうか?Windows クライアントから "Content-Type header not supported" が表示されるのはなぜですか?どうすればこれを解決できますか?

このように' を " に変更した後。

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

このような応答が返ってきました。

{
  "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

解決方法は?

引用符で囲んだ部分を ' から " を使用する場合は、引用符をエスケープしてください。 " は、以下のようにパラメータ内で使用します。

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

An 代替 は、jsonをファイルに入れて、そのファイルに対して @ という接頭辞をパラメータに付加します。

json.txt

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

と入力し、以下のようにcurlを実行します。

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