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

데이터베이스에 입력 할 일련의 데이터가 있습니다. 데이터를 입력하는 사용자 인터페이스는 대량 입력에 적합하지 않으므로 명령 줄에 해당하는 것을 공식화하려고합니다. 크롬에서 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 할 수 있습니까?



답변

명령 줄 에는 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


답변

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

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

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

예를 들어 다음 Solr 패싯 쿼리는 “-g” 없이 curl globbing을 해제 하지 않으면 실패합니다 .

curl -g 'http://localhost:8983/solr/query?json.facet={x:{terms:"myfield"}}'


답변

있음이 언급되어야 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`


답변

-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 콜론은 첫 번째 문자입니다.


답변

도움이 된 유일한 것은 json 본문 텍스트 대신 JSON 파일을 사용하는 것입니다. cURL을 사용하여 파일 내용을 본문 엔터티로 보내는 방법에 기반


답변