【问题标题】:Ruby Net::HTTP - Stop automatically escaping quotes?Ruby Net::HTTP - 停止自动转义引号?
【发布时间】:2011-09-20 16:45:36
【问题描述】:

我有以下代码:

    http = Net::HTTP.new("www.something.com", 80)
    http.set_debug_output($stdout)
    http.post("/blah", "something", {'random-parameter' => 'value1="something",value2="somethingelse"'})

然后当我从标准输出读取输出时,它看起来像这样:

<- "POST /blah HTTP/1.1\r\nAccept: */*\r\nContent-Type: application/x-www-form-urlencoded\r\nConnection: close\r\nrandom-parameter: value1=\"something\",value2=\"somethingelse\"\r\nContent-Length: 9\r\nHost: www.something.com\r\n\r\n"
<- "something"

引号被转义。问题是斜杠似乎被发送到服务器,它不喜欢那样。我收到一个错误提示

Unknown value for random-parameter in header: {value1=\\\"something\\\"value2=\\\"somethingelse\\\"}

所以我的问题是,有没有办法告诉 Net::HTTP 不要插入这些斜杠,或者在发送标头之前将它们去掉?

澄清:

我正在使用 Ruby 1.8.7 和 Rails 2.0.2。

我认为可能是 Rails 正在逃避角色,但我不知道如何让它停止。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-1.8 ruby-on-rails-2


    【解决方案1】:

    您的名称/值对是“随机参数”的值不是问题吗,因此需要对其进行转义。

    我希望当您检查控制器方法中的随机参数值时,它不会有斜线 - 您可以调试代码或打印参数以查看接收到的内容吗?

    【讨论】:

      【解决方案2】:

      您确定您正确构建了标题吗? Net::HTTP 在发送请求时不引用引号。您可以使用例如 netcat (nc) 轻松验证它:

      1号航站楼:

      > nc -v -l -p 2323
      

      2 号航站楼(在 irb 中):

      > http = Net::HTTP.new("localhost", 2323)
      > http.post("/blah", "something", {'random-parameter' => ... )
      

      结果(在终端 1):

      listening on [any] 2323 ...
      connect to [127.0.0.1] from localhost [127.0.0.1] 37598
      POST /blah HTTP/1.1
      Connection: close
      Accept: */*
      Random-Parameter: value1="something",value2="somethingelse"
      Content-Type: application/x-www-form-urlencoded
      Content-Length: 9
      Host: localhost:2323
      
      something
      

      我认为您实际上可能想要做的(不确定,但我猜)更像是 HTTP 规范:

      > http.post("/blah", "something", {
          'random-parameter' => 'value1="something"; value2="somethingelse"' })
      

      Rails 可能会将您的第一个 value1=... 解释为整个值..当您可能需要用 ';' 分隔值时,而不是 ','。

      另请注意,您通常不会通过请求标头传递参数。但也许这就是您在这种情况下想要做的(?)否则您应该像 param1=foo&param2=bar 那样在 URL 本身中传递参数,或者使用 x-www-form-urlencoded 来传递参数。

      请参阅此处获取备忘单:
      http://www.rubyinside.com/nethttp-cheat-sheet-2940.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-15
        • 2022-01-17
        • 1970-01-01
        相关资源
        最近更新 更多