Ruby Net :: HTTP - 停止自动转义报价?

ext*_*ine 5 ruby ruby-on-rails ruby-1.8 ruby-on-rails-2

我有以下代码:

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

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

<- "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"
Run Code Online (Sandbox Code Playgroud)

引号被转义.问题是斜线似乎被发送到服务器,这不喜欢.我收到的错误是

Unknown value for random-parameter in header: {value1=\\\"something\\\"value2=\\\"somethingelse\\\"}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,有没有办法让Net :: HTTP不插入这些斜杠,或者在发送标题之前将其删除?

澄清:

我正在使用Ruby 1.8.7和Rails 2.0.2.

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

Cas*_*per 2

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

1号航站楼:

> nc -v -l -p 2323
Run Code Online (Sandbox Code Playgroud)

2 号航站楼(irb 内):

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

结果(在 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
Run Code Online (Sandbox Code Playgroud)

我认为你实际上可能想要做的(不确定,但我猜测)是更符合 HTTP 规范的事情:

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

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

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

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