Mystery in Ruby sinatra
- by JVK
I have the following Sinatra code:
post '/bucket' do
# determine if this call is coming from filling out web form
is_html = request.content_type.to_s.downcase.eql?('application/x-www-form-urlencoded')
# If this is a curl call, then get the params differently
unless is_html
params = JSON.parse(request.env["rack.input"].read)
end
p params[:name]
end
If I call this using Curl, params has values, but when this is called via a web form, then params is nil and params[:name] has nothing. I spent several hours figuring out why it happens and asked help from other people, but no one could really find out what is going on.
One thing to note is, if I comment out this line:
params = JSON.parse(request.env["rack.input"].read)
then params has the correct value for "web-form" posting.
Actually, the goal is to get the params value if this code is being called by CURL call, so I used:
params = JSON.parse(request.env["rack.input"].read)
but it messed up the web-form posting. Can anyone solve this mystery?