Kiedy uruchomić polecenia curlJak odczytać dane żądanie POST w szafie
curl -v -H "Content-type: application/json" -X POST -d '{"name":"abc", "id":"12", "subject":"my subject"}' http://localhost:9292
wysłać żądanie POST z danymi do mojego wniosku do bielizny, moje wydruki kod z {}
. To pochodzi z puts req.POST()
w poniższym kodzie.
Dlaczego zamiast danych POST wydrukuje się {}
? A jak poprawnie uzyskać dostęp do danych POST w aplikacji Rack?
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 - Odczyt strumienia I/O z middleware może przerwać aplikację Rails. Kiedy masz wartość, musisz upewnić się, że uruchom 'req.env ['rack.input']. Rewind', aby zresetować strumień. – lookitsatravis
@lookitsatravis: Dzięki, dodałem notatkę o tym do odpowiedzi. OP używa Rack bezpośrednio bez Railsów lub innych frameworków, więc nie będzie miał zastosowania w ich przypadku. Jeśli używasz Railsów, będą inne sposoby na odczytanie żądań 'application/json'. –
@Niel: Zgoda! W moim przypadku użycia, używam [rack-attack] (https://github.com/kickstarter/rack-attack) i jedna z moich kontroli przepustnicy logowania wymaga, że parsuję treść żądania, zanim Rails go odczyta. Przypadek Edge, na pewno, ale to doprowadziło mnie do tego posta i do mojego komentarza. Twoje zdrowie! – lookitsatravis