2011-01-01 9 views
0

Ich verwende net/http in Ruby, um eine GET Anfrage an einen Webdienst zu senden. Der wichtige Bit des Codes ist die folgende:Problem mit `&` in Net :: HTTP :: Get.new

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

params ist eine Zeichenfolge, die key=val&blag=blorg Schlüssel-Wert-Paare in der Form enthält. Wenn die Antwort eingeht, stellt sie sich als eine Fehlerseite vom Server heraus, die den Anforderungs-URI angibt. anstelle von key=val&blag=blorg hat es key=val&blag=blorg. Da, wenn ich die gleiche Adresse in einen Webbrowser mit & statt & eingeben, bekomme ich die erwartete Antwort, ich vermute, dass die Flucht von & ist, was das Problem verursacht. Wenn jedoch jemand mit mehr Erfahrung nicht einverstanden ist, kannst du meine Frage gerne umbenennen!

Ich sollte beachten, dass, wenn ich http://www.thehost.com/api#{ROUTES[sym]}?#{params} mit Net::HTTP.get_response verwenden, bekomme ich die erwartete Antwort. Was kann ich tun, um das zu beheben?

Antwort

1

Nur eine wilde Vermutung: Machst du das in Rails, und könnte seine XSS-Schutz/HTML-Escapefunktionen der Übeltäter sein? Was passiert, wenn Sie es in params.html_safe ändern?

Da die Verwendung von #{...} in einem Fall funktioniert, was passiert, wenn Sie "/api#{ROUTES[sym]}?#{params}" statt Verketten von Zeichenfolgen mit + tun?

+0

Ich verwende nicht Rails; Ich versuche 'html_safe' und melde mich bei dir. Danke für Ihre Hilfe! –

+0

'html_safe' ist eine Funktion von Rails, damit Sie in diesem Fall kein Glück haben. Versuchen Sie den anderen Vorschlag, obwohl. – Theo