Как curl может выполнить запрос на получение данных? - PullRequest
1 голос
/ 17 февраля 2020

Вводные материалы по ElasticSearch включают следующий пример curl запрос:

curl -X GET "localhost:9200/_search?pretty" -H 'Content-Type: application/json' -d'
{
    "query": {
        "query_string" : {
            "query" : "(new york city) OR (big apple)",
            "default_field" : "content"
        }
    }
}
'

В этом запросе есть два параметра, которые, по моему мнению, были несовместимы:

  • -X GET, который указывает, что запрос является GET.
  • -d [...], который указывает, что запрос имеет полезную нагрузку данных.

Я думал, что указание полезной нагрузки данных возможно только в запросах PUT или POST, поскольку запросы GET не имеют понятия полезной нагрузки данных. Это действительная команда curl? Что именно он делает?

1 Ответ

2 голосов
/ 17 февраля 2020

Выше curl запрос является допустимым запросом, фактически, если у вас есть индекс и данные, вы можете проверить вывод вашей команды.

Я попробовал его в своей системе и индексе ES, и он дал мне правильный ответ.

curl -v -X GET "localhost:9500/querytime/_search?pretty" -H 'Content-Type: application/json' -d'
{
    "query": {
        "query_string" : {
            "query" : "(avengers) OR (big apple)",
            "default_field" : "movie_name"
        }
    }
}'
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 9500 (#0)
> GET /querytime/_search?pretty HTTP/1.1
> Host: localhost:9500
> User-Agent: curl/7.64.1
> Accept: */*
> Content-Type: application/json
> Content-Length: 156
>
* upload completely sent off: 156 out of 156 bytes
< HTTP/1.1 200 OK
< content-type: application/json; charset=UTF-8
< content-length: 905
<
{
  "took" : 4,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 3,
      "relation" : "eq"
    },
    "max_score" : 0.14874382,
    "hits" : [
      {
        "_index" : "querytime",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.14874382,
        "_source" : {
          "movie_name" : "Avengers: Infinity War"
        }
      }
    ]
  }
}

Как упомянуто в официальном руководстве команды curl, если вы используете систему на основе *nix , тогда вы можете искать ниже в руководстве curl.

-G, --get При использовании этого параметра все данные, указанные с помощью -d, --data, --data-binary или --data-urlencode, будут использоваться в HTTP. GET-запрос вместо POST-запроса, который в противном случае использовался бы. Данные будут добавлены в URL с помощью символа «?» разделитель

Как объяснено в этом SO ответе, от веб-сервера также зависит синтаксический анализ тела в GET-запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...