J'ai le code Sinatra suivant:Mystère dans Ruby 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
Si j'appelle cela en utilisant Curl, params
a des valeurs, mais quand on l'appelle via un formulaire Web, puis params
est nil
et params[:name]
n'a rien . J'ai passé plusieurs heures à comprendre pourquoi cela arrivait et à demander de l'aide à d'autres personnes, mais personne ne pouvait vraiment savoir ce qui se passait.
Une chose à noter est, si je commente cette ligne:
params = JSON.parse(request.env["rack.input"].read)
alors params
a la valeur correcte pour l'affichage « formulaire web ».
En fait, le but est d'obtenir la valeur params
si ce code est appelé par appel CURL, donc j'utilisé:
params = JSON.parse(request.env["rack.input"].read)
mais il foiré l'affichage formulaire web. Quelqu'un peut-il résoudre ce mystère?
Il est possible que ce ne soit pas un cas de forme Curl vs. page Web, mais plutôt un cas de 'application/x-www-form-urlencoded' vs.' multipart/form-data'. – L2G
Le 'content_type' pour une requête Curl' POST', et la requête d'un navigateur utilisant le formulaire, est 'application/x-www-form-urlencoded'. –