JSON 데이터를 서버에 보내고 응답을 읽어 서버를 테스트하려고 합니다.
POST
비슷한 데이터가 필요 하지만 다음을 {"item":"value with spaces"}
사용할 때 curl
백슬래시와 큰따옴표를 보내는 것으로 나타났습니다 .
curl -d "{\"item\":\"value with spaces\"}" http://myserver.com/somerubyapp?get=stuff
서버가 실제로 받는 내용에는 "{\"item\":\"value with spaces\"}"
문자열 끝의 큰따옴표, 백슬래시 및 모든 것이 포함됩니다.
제가 잘못 사용했나요 curl
? 아니면 쉘이나 배쉬에 문제가 있는 걸까요?
답변1
이것은 사후 릴리스이지만 최근에 (다른 백엔드를 사용하여) 동일한 문제가 발생하여 원인이 잘못된 콘텐츠 유형이라는 것을 발견했습니다. 기본적으로 "text/plain" 또는 "text/html"입니다. 제 경우에는 curl -H "Content-Type: application/json" -d ...
문제가 해결되었습니다 .
답변2
어떤 서버측 인쇄 매개변수를 사용하고 있습니까? 이는 메소드의 인공물일 가능성이 높습니다.
"{\"...
.ie 및 의 두 가지 참조 방법을 사용할 수 있습니다 '{"...
.
편집: 제가 암시하는 효과의 예를 들어 보겠습니다.
% irb -r json
>> h = {"item" => "value with spaces"} # (1)
=> {"item"=>"value with spaces"} # (2)
>> h.to_json
=> "{\"item\":\"value with spaces\"}" # (3)
>> puts(h.to_json)
{"item":"value with spaces"} # (4)
=> nil
(1) 단일 키와 관련 값으로 구성된 해시 테이블을 정의합니다. irb는 다시 해시 테이블인 (2)의 결과를 보여줍니다. 이제 JSON 표현 h
을 보면IRB(3)에서 내부 따옴표를 피하십시오. 반면 (4)는 백슬래시가 "실제로" 존재하지 않음을 나타냅니다.
그래서 그것은 달려있다어떻게서버에서 매개변수를 인쇄하면 우리에게 보여준 표현이 나올 수도 있습니다.