![컬 포스트 데이터에 대해 큰따옴표를 올바르게 이스케이프 처리합니까?](https://linux55.com/image/36863/%EC%BB%AC%20%ED%8F%AC%EC%8A%A4%ED%8A%B8%20%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%97%90%20%EB%8C%80%ED%95%B4%20%ED%81%B0%EB%94%B0%EC%98%B4%ED%91%9C%EB%A5%BC%20%EC%98%AC%EB%B0%94%EB%A5%B4%EA%B2%8C%20%EC%9D%B4%EC%8A%A4%EC%BC%80%EC%9D%B4%ED%94%84%20%EC%B2%98%EB%A6%AC%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
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)는 백슬래시가 "실제로" 존재하지 않음을 나타냅니다.
그래서 그것은 달려있다어떻게서버에서 매개변수를 인쇄하면 우리에게 보여준 표현이 나올 수도 있습니다.