Net :: HTTP :: Get.new中的`&`问题

时间:2011-01-01 20:56:49

标签: ruby http get request

我在Ruby中使用net/http向Web服务发送GET请求。代码的重要部分如下:

Net::HTTP.start("www.thehost.com") do |http|
  req = Net::HTTP::Get.new("/api" + ROUTES[sym] + "?" + params)
  resp = http.request req
end

params是一个字符串,其中包含key=val&blag=blorg形式的键值对。当响应进来时,它结果是来自服务器的错误页面,它引用了请求URI;它不是key=val&blag=blorg,而是key=val&blag=blorg。因为当我使用&而不是&将相同的地址输入到网络浏览器中时,我得到了预期的响应,我怀疑&的转义是导致问题的原因。但是,如果有更多经验的人不同意这一点,请随时重新命名我的问题!

我应该注意,当http://www.thehost.com/api#{ROUTES[sym]}?#{params}Net::HTTP.get_response一起使用时,我得到了预期的响应。我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:1)

只是一个疯狂的猜测:你是否在Rails中这样做,它的XSS保护/ HTML转义功能是否可能成为罪魁祸首?如果将其更改为params.html_safe会怎样?

由于在一个案例中使用#{...}有效,如果您执行"/api#{ROUTES[sym]}?#{params}"而不是使用+连接字符串会发生什么?