代码之家  ›  专栏  ›  技术社区  ›  ngw

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

  •  1
  • ngw  · 技术社区  · 12 年前

    我对辛纳屈有个奇怪的问题:

    class Server < Sinatra::Base
      before do
        puts params.inspect
      end
      get '/' do
      end
    end
    

    当我将url卷曲为:

    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 回复  |  直到 12 年前
        1
  •  1
  •   Anshul Goyal    12 年前

    这个 & 在bashshell中,将启动进程并在后台运行。

    因此,如果您正常运行该命令,

    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'
    
        2
  •  0
  •   mattwise    12 年前

    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'
    
    推荐文章