Sinatra用curl丢失了部分查询字符串

时间:2014-02-12 16:52:17

标签: ruby http curl sinatra

我对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"}

这里发生了什么,我该怎么做才能解决问题?

2 个答案:

答案 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'