Проблема с `&` в Net :: HTTP :: Get.new - PullRequest
0 голосов
/ 01 января 2011

Я использую net/http в Ruby для отправки 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 Ответ

1 голос
/ 02 января 2011

Просто дикая догадка: вы делаете это в Rails, и могут ли его функции защиты XSS / экранирования HTML быть виновником? Что произойдет, если вы измените его на params.html_safe?

Поскольку использование #{...} в одном случае работает, что произойдет, если вы сделаете "/api#{ROUTES[sym]}?#{params}" вместо объединения строк с +?

...