我对Sinatra有一个奇怪的问题:
class Server < Sinatra::Base
before do
puts params.inspect
end
get '/' do
end
end
当我用以下网址卷曲网址时
chienandalusialocal:~ ngw$ curl http://0.0.0.0:9292/thing?a=100&b=200
params散列只包含第一个参数:
127.0.0.1 - - [12/Feb/2014 17:47:39] "GET /thing?a=100 HTTP/1.1" 401 - 0.0011
a=100
{"a"=>"100"}
这里发生了什么,我该怎么做才能解决问题?
答案 0 :(得分:1)
bash shell中的&
将启动该进程并在后台运行它。
因此,如果您正常运行命令,
curl http://0.0.0.0:9292/thing?a=100&b=200
Bash将此解释为curl http://0.0.0.0:9292/thing?a=100&
并将该流程委托为后台流程。
如果向上滚动一点,您可能会发现类似
的内容[1] 14039
表示后台进程的pid
,以及最后的另一个声明,如
[1]+ Done curl http://0.0.0.0:9292/thing?a=100
表示完成curl命令。
如前所述,出路是逃避&符号,或者将字符串放在引号中,如下所示:
curl http://0.0.0.0:9292/thing?a=100\&b=200
curl 'http://0.0.0.0:9292/thing?a=100&b=200'
答案 1 :(得分:0)
Bash看到&符并试图用它做点什么。您可以转义“&”符号,也可以将字符串放在引号中,如同建议的bliof。
curl http://0.0.0.0:9292/thing?a=100\&b=200
curl 'http://0.0.0.0:9292/thing?a=100&b=200'