컬 포스트 데이터에 대해 큰따옴표를 올바르게 이스케이프 처리합니까?

컬 포스트 데이터에 대해 큰따옴표를 올바르게 이스케이프 처리합니까?

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)는 백슬래시가 "실제로" 존재하지 않음을 나타냅니다.

그래서 그것은 달려있다어떻게서버에서 매개변수를 인쇄하면 우리에게 보여준 표현이 나올 수도 있습니다.

관련 정보