나는, 내 랙 응용 프로그램에 {}
을 내 코드의 인쇄 데이터로 POST 요청을 보내도록 curl 명령읽는 방법 POST 데이터
curl -v -H "Content-type: application/json" -X POST -d '{"name":"abc", "id":"12", "subject":"my subject"}' http://localhost:9292
를 실행합니다. 그것은 아래의 코드에서 puts req.POST()
에서 오는 것입니다.
왜 POST 데이터 대신 {}
가 출력됩니까? 그리고 랙 어플리케이션에서 POST 데이터에 올바르게 액세스하려면 어떻게해야합니까?
require 'json'
class Greeter
def call(env)
req = Rack::Request.new(env)
if req.post?
puts req.POST()
end
[200, {"Content-Type" => "application/json"}, [{x:"Hello World!"}.to_json]]
end
end
run Greeter.new
FYI - 미들웨어로부터 I/O 스트림을 읽으면 Rails 애플리케이션이 깨질 수있다. 값을 얻었 으면'req.env [ 'rack.input'] rewind'를 실행하여 스트림을 재설정해야합니다. – lookitsatravis
@lookitsatravis : 감사합니다. 답변에 대한 메모를 추가했습니다. OP는 레일이나 다른 프레임 워크없이 Rack을 직접 사용하기 때문에 해당 경우 적용되지 않습니다. Rails를 사용한다면'application/json' 요청을 읽을 수있는 다른 방법이있을 것입니다. –
@Niel : 동의! 나의 특별한 경우에, 나는 랙 공격 (https://github.com/kickstarter/rack-attack)을 사용하고 있는데, 로그인 스로틀 점검 중 하나는 레일스가 그것을 읽기 전에 요청 본문을 구문 분석해야한다는 것이다. 가장자리 사건, 확실히,하지만이 게시물과 내 의견을 이끌었다. 건배! – lookitsatravis