我有以下 Sinatra 代码:
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
如果我使用 Curl 调用它,params
它有值,但是当它通过 Web 表单调用时,它params
是nil
并且params[:name]
什么都没有。我花了几个小时弄清楚为什么会发生这种情况并寻求其他人的帮助,但没有人能真正找出发生了什么。
需要注意的一件事是,如果我注释掉这一行:
params = JSON.parse(request.env["rack.input"].read)
然后params
具有“网络表单”发布的正确值。
params
实际上,如果此代码被 CURL 调用调用,目标是获取值,所以我使用了:
params = JSON.parse(request.env["rack.input"].read)
但它搞砸了网络表单的发布。谁能解开这个谜?