json 매개 변수가있는 Curl GET 요청


124

다음과 같이 cURL을 통해 명령 프롬프트에서 원격 REST API에 "GET"요청을 보내려고합니다.

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

그러나 출력을 반환하지 않습니다. 브라우저에서 직접 URL을 ping하려고했는데 성공적으로 응답을받을 수 있습니다. 명령에 어떤 문제가 있는지 이해할 수 없습니다.

기본적으로 curl을 통해 json 데이터를 응답으로 제공하는 원격 REST 서비스에 "GET"요청을 설정하고 싶습니다. 누구든지 내가 뭘 잘못하고 있는지 안내해 줄 수 있습니까? 다양한 게시물을 시도했지만 모두 GET이 아닌 POST 요청에 대해 이야기합니다.


서버 측에 어떤 오류가 게시되고 있습니까?
Scary Wombat 2014 년

오류 없음, 서버 측에서 성공적으로 실행 중입니다. 그러나 컬 측면에서는 데이터가 표시되지 않습니다. 그것은 단지 몇 초 후에 단지 ping을하고 그것은 단지 데이터없이 공백을 표시합니다.
Pradeep Simha 2014 년

curl -i -H "Accept : application / json" " server : 5050 / a / c / getName {"param0 ":"pradeep "}"(x 대신 -i 옵션)을 사용해 볼 수 있습니다.
Harshal Bulsara 2014 년

답변:


139

이것은 작동합니다.

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

x 대신 -i 옵션을 사용하십시오.


4
아마도 다른 인용? "server : 5050 / a / c / getName { 'param0': 'pradeep'}"
AB

실제로 'server:5050/a/c/getName{"param0":"pradeep"}'또는 이어야합니다 "server:5050/a/c/getName{\"param0\":\"pradeep\"}".
Benjamin W.

16

당신이 몸 안에 데이터를 전송하려는 경우, 당신은 확인해야 POST하거나 PUT대신 GET.

당신이 보내려고하는 것처럼 저를 위해, 그것은 본다 URI 매개 변수 쿼리를 관련이 없습니다, GET당신은 또한 이러한 매개 변수를 넣을 수 있습니다 POST, PUT등등을.

쿼리는 본질적으로 계층 적이 지 않은 추가 식별 정보를 포함하는 물음표 ( "?")로 구분 된 선택적 부분입니다. 쿼리 문자열 구문은 일반적으로 정의되지 않지만 일반적으로 세미콜론 또는 앰퍼샌드로 구분 된 쌍이있는 = 쌍의 시퀀스로 구성됩니다.

예를 들면 :

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

7
모든 HTTP 요청 메시지는 메시지 본문을 포함 할 수 있습니다. GET 의미론으로 인해 GET에 유용하지 않습니다. 요청 본문의 내용이있는 경우 응답을 변경해서는 안됩니다.
Jarek Przygódzki

12

본문에 JSON이 포함 된 GET 요청을 제출하려는 경우 (예를 들어 XHR 요청에 대해 서버가 GET 요청에 대한 본문 처리를 지원한다는 것을 알고 있음) 다음을 수행 할 수 있습니다.

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

대부분의 최신 웹 서버는 이러한 유형의 요청을 수락합니다.


이것은 의도 한 결과를 생성하지 않습니다. 디버깅을 위해 httpbin.org/get 을 사용 하면 다음과 같은 결과가 나타납니다. { "args": {}, "headers": { "Accept": "application/json", "Content-Length": "20", "Content-Type": "application/json", "Host": "httpbin.org", "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:57.0) Gecko/20100101 Firefox/57.0" }, "origin": "27.94.235.50, 27.94.235.50", "url": "https://httpbin.org/get" }아무것도 수신되지 않습니다. 다음과 같은 쿼리 문자열을 사용해야합니다curl -X GET https://httpbin.org/get?data=%7B%22param0%22%3A%22pradeep%22%7D
Jacques

그것은 웹 서버가 GET 요청에 대한 본문을 검사하는지 여부에 따라 다르며, 이는 전적으로 표준 동작이 아니라는 것을 인정합니다. 당신이 말한 것처럼 URL 쿼리 매개 변수를 사용하는 것이 더 나을 수 있습니다. get 요청에서 본문을 사용하는 한 가지 문제는 브라우저가 브라우저 기록을 탐색하여 요청을 재생할 수 없다는 것입니다. XHR 요청에는 괜찮을 수 있습니다.
Steven Soroka

또는 서버 측에서 충분히 제어 할 수있는 경우 "method": "get"과 같은 json 데이터에 특수 속성을 추가하고, 포스트 요청에서 페이로드를 전송하고 서버의 코드가이를 해석하도록하는 것입니다. get 요청으로.
Jacques

@Jacques는 확실하지만 서버를 제어 할 수 있다면 서버에서 GET 요청 본문을 쉽게 읽을 수 있습니다. 원래의 질문으로 돌아가서,이 모든 접선은 주제에서 약간 벗어난 것 같습니다. 질문을 다시 읽으면 OP가 서버를 변경할 권한이 없다고 생각합니다.
Steven Soroka

네, 사실입니다. 서버를 제어하는 ​​경우. 내 의견은 내가 말했듯이 의도 한 결과를 생성하지 않는 다음 진술에 의해 자극을 받았습니다. "대부분의 최신 웹 서버는 이러한 유형의 요청을 수락합니다". 사실, 그들은 귀하가 설명한 요청을 수락하지만 요청이 의도 한 결과를 생성하지 못합니다. 또는 다음과 같이 문을 수정할 수 있습니다. "대부분의 최신 웹 서버는 사용자가 서버 측에서 직접 제어 할 수 있다고 가정 할 때 이러한 유형의 요청을 수락하지만 이것은 비표준입니다."
Jacques

8

GET은 이름 값 쌍을 사용합니다.

다음과 같이 시도하십시오.

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

또는

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

btw 일반 REST는 다음과 같아야합니다.

curl http://server:5050/a/c/getName/pradeep GET URL에서 JSON을 사용하는 경우 표준 방법이 아닙니다.


4

사용자 이름 및 암호로 보호 된 서비스의 경우 다음을 사용하십시오.

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

curl -X POST -H "Content-type : application / json"-d '{ "stuff": "things"}'http : // ...
keithpjolley

내가 틀렸다면 저를 정정하십시오.하지만 curl 요청에 -d를 사용하면 (메소드를 지정하지 않고) 요청이 POST가됩니다.
Gokigooooks

3

시험

curl -G ...

대신에

curl -X GET ...

일반적으로이 옵션은 필요하지 않습니다. 모든 종류의 GET, HEAD, POST 및 PUT 요청은 전용 명령 줄 옵션을 사용하여 호출됩니다.

이 옵션은 HTTP 요청에 사용 된 실제 단어 만 변경하며 curl이 작동하는 방식은 변경하지 않습니다. 예를 들어 적절한 HEAD 요청을하려면 -X HEAD를 사용하는 것만으로는 충분하지 않습니다. -I, --head 옵션을 사용해야합니다.


1

어떤 이유로 인해 위에서 언급 한 솔루션 중 어느 것도 나를 위해 일하지 않았습니다. 여기 내 해결책이 있습니다. 꽤 기본입니다.

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 요청에서 보내야하는 데이터입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.