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

спросил

Изменено 1 год, 6 месяцев назад

Просмотрено 597 тысяч раз

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

 curl -X GET \
  -H "Тип содержимого: приложение/json" \
  -H "Принять: приложение/json" \
  "http://сервер:5050/a/c/getName/{"param0":"pradeep"}"
 

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

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

  • json
  • остальное
  • завиток
3

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

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

используйте опцию -i вместо x.

2

Если вы действительно хотите отправить запрос GET с JSON в теле (скажем, для запроса XHR, и вы знаете, что сервер поддерживает обработку тела в запросах GET), вы можете:

 curl -X GET \
  -H "Тип содержимого: приложение/json" \
  -H "Принять: приложение/json" \
  -d '{"param0":"прадип"}' \
  "http://сервер:5050/a/c/getName"
 

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

5

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

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

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

Например:

 curl http://server:5050/a/c/getName?param0=foo¶m1=bar
 
1

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

Если в GET URL принимается JSON, это не стандартный способ.

Попробуйте

 завиток -G ...
 

вместо

 завиток -X ПОЛУЧИТЬ. ..
 

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

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

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

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

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

curl -X GET API_ENDPOINT -H ‘Тип содержимого: 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

метод http — curl -GET и -X GET

спросил

Изменено 2 года, 6 месяцев назад

Просмотрено 255 тысяч раз

Curl предлагает ряд различных вызовов методов http с префиксом X, но также предлагает те же методы без префикса. Я пробовал оба, и я не могу понять разницу. Может ли кто-нибудь объяснить мне быстро, чем отличаются эти две операции?

  • curl
  • http-method

По умолчанию вы используете curl без явного указания, какой метод запроса использовать. Если вы просто передадите URL-адрес HTTP, например curl http://example.com , он будет использовать GET. Если вы используете -d или -F

, curl будет использовать POST, -I вызовет HEAD, а -T сделает его PUT.

Если по какой-либо причине вас не устраивают эти варианты по умолчанию, которые делает за вас curl, вы можете переопределить эти методы запроса, указав -X [НЕЗАВИСИМОЕ] . Таким образом, вы можете, например, отправить DELETE, выполнив curl -X DELETE [URL] .

Таким образом, бессмысленно выполнять curl -X GET [URL] , так как GET все равно будет использоваться. В том же духе бессмысленно делать curl -X POST -d data [URL]... Но вы можете сделать забавный и довольно редкий запрос, который отправляет тело запроса в запросе GET с чем-то вроде

curl - X GET -d данные [URL] .

Копание глубже

завиток -GET (с одним тире) просто не подходит для этой цели. Это эквивалентно указанию параметров -G , -E и -T , и это сделает что-то совершенно другое.

Существует также вариант скручивания под названием --get , чтобы не путать ни с одним из них. Это длинная форма -G, которая используется для преобразования данных, указанных с помощью -d , в запрос GET вместо POST.

(впоследствии я использовал свой собственный ответ здесь, чтобы заполнить часто задаваемые вопросы по curl, чтобы покрыть это.)

Предупреждения

Современные версии curl будут информировать пользователей об этом ненужном и потенциально вредном использовании -X при включенном подробном режиме ( -v ) — чтобы пользователи были осведомлены. Дальнейшее объяснение и мотивация в этом сообщении в блоге.

-G преобразует тело POST + в запрос GET +

Вы можете попросить curl преобразовать набор параметров -d и вместо отправки их в тело запроса с помощью POST поместить их в конец URL-адреса строку запроса и выполнить GET с использованием `-G. Вот так:

 curl -d name=daniel -d grumpy=yes -G https://example.com/
 
5

Использование -X [WHATEVER] просто изменяет строку метода запроса , используемую в HTTP-запросе. Это легче понять с помощью двух примеров — одного с -X [WHATEVER]

и одного без — и соответствующих заголовков HTTP-запроса для каждого:

 # curl -XPANTS -o nul -v http://neverssl.com/
* Подключен к neverssl.com (13.224.86.126) порт 80 (#0)
> БРЮКИ / HTTP/1.1
> Хост: neverssl.com
> Пользовательский агент: curl/7.42.0
> Принять: */*
# curl -o nul -v http://neverssl.com/
* Подключен к neverssl.com (13.33.50.167) порт 80 (#0)
> ПОЛУЧИТЬ/HTTP/1.1
> Хост: neverssl.com
> Пользовательский агент: curl/7.42.0
> Принять: */*
 

-X [ваш метод]
X позволяет переопределить значение по умолчанию «Получить»

** нижний регистр x исправлен на верхний X

1

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.