使用json参数进行Curl GET请求

时间:2014-01-24 06:59:24

标签: json rest curl

我正尝试通过cURL从命令提示符向远程REST API发送“GET”请求,如下所示:

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

但它没有返回输出。我试图直接从浏览器ping URL,我能够成功获得响应,我不明白该命令有什么问题。

基本上我想为远程REST服务设置一个“GET”请求,它通过curl将json数据作为响应。任何人都可以指导我,我在做什么错误?我尝试了各种帖子,但所有帖子都谈到了不是关于GET的POST请求。

7 个答案:

答案 0 :(得分:119)

这应该有效:

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

用户选项-i而不是x。

答案 1 :(得分:13)

如果您想在正文中发送数据,则必须制作POSTPUT而不是GET

对我而言,您似乎尝试发送与GET无关的query with uri parameters,您也可以将这些参数放在POST上,{{1}等等。

  

查询是一个可选部分,由问号(“?”)分隔,其中包含本质上不是分层的其他标识信息。查询字符串语法不是一般定义的,但它通常被组织为一对=对,其中的对由分号或符号分隔。

例如:

PUT

答案 2 :(得分:8)

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,则不是标准方式。

答案 3 :(得分:5)

对于用户名和密码保护的服务,请使用以下

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

答案 4 :(得分:3)

尝试

curl -G ...

而不是

curl -X GET ...

通常您不需要此选项。使用专用命令行选项可以调用各种GET,HEAD,POST和PUT请求。

此选项仅更改HTTP请求中使用的实际单词,它不会改变curl行为的方式。因此,例如,如果您想要发出正确的HEAD请求,使用-X HEAD就不够了。您需要使用-I, - head选项。

答案 5 :(得分:1)

如果您确实要使用正文提交带有JSON的GET请求,则可以:

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

大多数现代Web服务器都接受这种类型的请求。

答案 6 :(得分:0)

由于某种原因,以上提到的解决方案都不对我有用。这是我的解决方案。这很基本。

  

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请求中发送的数据