it-swarm.com.ru

Curl GET-запрос с параметром json

Я пытаюсь отправить запрос "GET" на удаленный API REST из командной строки через cURL следующим образом:

curl -X GET -H "Content-type: application/json" -H "Accept: application/json"  "http://server:5050/a/c/getName/{"param0":"pradeep"}"

Но это не возвращает ничего. Я пытался пропинговать URL-адрес прямо из браузера, я могу успешно получить ответ, я не понимаю, что не так с командой.

По сути, я хочу установить запрос "GET" для удаленной службы REST, которая дает мне данные json в качестве ответа через curl. Кто-нибудь может подсказать мне, какую ошибку я делаю? Я пробовал разные посты, но все они говорят о POST запросах, а не о GET.

97
Pradeep Simha

Это должно работать:

  curl -i -H "Accept: application/json" "server:5050/a/c/getName{'param0':'pradeep'}" 

опция пользователя -i вместо x.

120
Harshal Bulsara

Если вы хотите отправить свои данные внутри тела, вам нужно создать POST или PUT вместо GET.

Для меня похоже, что вы пытаетесь отправить запрос с параметрами uri , который не связан с GET, вы также можете поместить эти параметры в POST, PUT и так далее.

Запрос является необязательной частью, разделенной знаком вопроса ("?"), Которая содержит дополнительную идентификационную информацию, которая не является иерархической по своей природе. Синтаксис строки запроса не определяется в общем, но он обычно организован как последовательность пар =, с парами, разделенными точкой с запятой или амперсандом.

Например:

curl http://server:5050/a/c/getName?param0=foo&param1=bar
14
Martin Seeler

GET принимает пары имя-значение.

Попробуйте что-то вроде:

curl http://server:5050/a/c/getName/?param1=pradeep

или же

curl http://server:5050/a/c/getName?param1=pradeep

кстати, обычный REST должен выглядеть примерно так

curl http://server:5050/a/c/getName/pradeep Если он принимает JSON в GET URL, это не стандартный способ.

8
user2877889

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

curl -u admin:password -X GET http://172.16.2.125:9200 -d '{"sort":[{"lastUpdateTime":{"order":"desc"}}]}'
5
Sandeep K V

Пытаться

curl -G ...

вместо

curl -X GET ...

Обычно вам не нужна эта опция. Все виды запросов GET, HEAD, POST и ​​PUT скорее вызываются с помощью специальных параметров командной строки.

Эта опция только изменяет фактическое Word, используемое в HTTP-запросе, но не меняет поведение curl. Так, например, если вы хотите сделать правильный запрос HEAD, использование -X HEAD будет недостаточно. Вам нужно использовать опцию -I, --head.

3
smci

Если вы действительно хотите отправить запрос GET с JSON в теле, вы можете:

curl -X GET \
  -H "Content-type: application/json" \
  -H "Accept: application/json" \
  -d '{"param0":"pradeep"}' \
  "http://server:5050/a/c/getName"

Большинство современных веб-серверов принимают этот тип запроса.

1
Steven Soroka

Ни одно из вышеупомянутых решений не помогло мне по какой-то причине. Вот мое решение. Это довольно просто.

curl -X GET API_ENDPOINT - H 'Content-Type: application/json ' - d ' JSON_DATA '

API_ENDPOINT - это ваша конечная точка API, например: http://127.0.0.1:80/api

- H был использован для добавления содержимого заголовка.

JSON_DATA - это ваше тело запроса, оно может быть чем-то вроде :: {"data_key": "value"}. '' , окружающие JSON_DATA, важны.

Все, что после - d - это данные, которые необходимо отправить в запросе GET.

0
bhatman