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正在逃避角色,但我不知道如何让它停止.
您确定正确构建了标头吗?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
| 归档时间: |
|
| 查看次数: |
987 次 |
| 最近记录: |