我在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
一起使用时,我得到了预期的响应。我该怎么做才能解决这个问题?
答案 0 :(得分:1)
只是一个疯狂的猜测:你是否在Rails中这样做,它的XSS保护/ HTML转义功能是否可能成为罪魁祸首?如果将其更改为params.html_safe
会怎样?
由于在一个案例中使用#{...}
有效,如果您执行"/api#{ROUTES[sym]}?#{params}"
而不是使用+
连接字符串会发生什么?