curl을 사용하여 배열로 json 객체를 PUT하는 방법


95

데이터베이스에 입력 할 일련의 데이터가 있습니다. 데이터를 입력하는 사용자 인터페이스는 대량 입력에 적합하지 않으므로 명령 줄에 해당하는 것을 공식화하려고합니다. 크롬에서 UI의 네트워크 요청을 살펴보면 json 객체의 PUT 요청이 보입니다. 요청을 복제하려고 할 때

curl -H 'Accept: application/json' -X PUT '{"tags":["tag1","tag2"],"question":"Which band?","answers":[{"id":"a0","answer":"Answer1"},{"id":"a1","answer":"answer2"}]}' http://example.com/service`

오류가 발생합니다

curl : (3) [globbing] 위치 X에서 지원되지 않는 중첩 중괄호

여기서 X는 첫 번째 "["의 문자 위치입니다.

배열을 포함하는 json 객체를 어떻게 PUT 할 수 있습니까?

답변:


148

명령 줄 에는 PUT에서 보내려는 문자열 앞에 -d /-data가 삽입되어 있어야하며 Accept가 아닌 Content-Type을 설정하려고합니다.

curl -H 'Content-Type: application/json' -X PUT -d '[JSON]' http://example.com/service

질문의 정확한 JSON 데이터를 사용하면 전체 명령 줄은 다음과 같습니다.

curl -H 'Content-Type: application/json' -X PUT \
-d '{"tags":["tag1","tag2"],"question":"Which band?","answers":[{"id":"a0","answer":"Answer1"},{"id":"a1","answer":"answer2"}]}' \
http://example.com/service

4
Content-Type (Accept 대신)이이 경우 설정해야하는 헤더이기 때문에 -1입니다.
Goran

4
궁금한 사람들에게 [JSON]은 단순히 JSON 문자열의 자리 표시 자입니다. JSON 문자열 주위에 추가 대괄호를 추가하지 마십시오.
Mihai Todor

89

원본 게시물에 다른 문제 (예 : "-d"누락)가 있었지만 오류 메시지는 더 일반적입니다.

curl : (3) [globbing] 위치 X에서 지원되지 않는 중첩 중괄호

이는 중괄호 {} 및 대괄호 []가 curl에서 특수 글 로빙 문자이기 때문입니다. 이 글 로빙을 끄려면 " -g "옵션을 사용하십시오 .

예를 들어 다음 Solr 패싯 쿼리는 "-g" 없이 curl globbing을 해제 하지 않으면 실패합니다 . curl -g 'http://localhost:8983/solr/query?json.facet={x:{terms:"myfield"}}'


3
이것은 -g예상대로 작동 하는 올바른 솔루션이었습니다 . 감사합니다 @Yonik
arjones

2
내 선하, 내 GraphQL 컬 문제에 대한 해결책을 찾고 있었는데 이것이 도움이되었습니다. 어썸 소스.
NetOperator Wibby

39

있음이 언급되어야 Accept헤더가 우리가 받아들이는 무엇에 대한 서버 뭔가를 알려줍니다 이러한 맥락에서 관련 헤더 인 반면,Content-Type

그것은 지정하는 것이 유용 Content-Type으로 application/jsonJSON을 보낼 때. curl의 경우 구문은 다음과 같습니다.

-H 'Content-Type: application/json'

따라서 완전한 curl 명령은 다음과 같습니다.

curl -H 'Content-Type: application/json' -H 'Accept: application/json' -X PUT -d '{"tags":["tag1","tag2"],"question":"Which band?","answers":[{"id":"a0","answer":"Answer1"},{"id":"a1","answer":"answer2"}]}' http://example.com/service`

2

-g 와 함께 큰 따옴표 대신 작은 따옴표 를 사용해보십시오.

다음 시나리오가 나를 위해 일했습니다.

curl -g -d '{"collection":[{"NumberOfParcels":1,"Weight":1,"Length":1,"Width":1,"Height":1}]}" -H "Accept: application/json" -H "Content-Type: application/json" --user test@testmail.com:123456 -X POST  https://yoururl.com

curl -g -d "{'collection':[{'NumberOfParcels':1,'Weight':1,'Length':1,'Width':1,'Height':1}]}" -H "Accept: application/json" -H "Content-Type: application/json" --user test@testmail.com:123456 -X POST  https://yoururl.com

이것은 특히 내 오류 curl 명령 오류를 해결했습니다 . 잘못된 URL 콜론은 첫 번째 문자입니다.


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