2014-05-02 43 views
4

我送這個請求到服務:我怎樣才能取消轉義該查詢字符串

get_store_data = Typhoeus::Request.new("http://localhost:3000/api/v1/store?service=#{(proxy_ticket.service)}&ticket=#{proxy_ticket.ticket}") 

proxy_ticket.service解析這個字符串"http://localhost:3000/api/v1/store"。當發送請求時,該字符串逃過此:

service=http%3A%2F%2Flocalhost%3A3000%2Fapi%2Fv1%2Fstore 

的問題是,在另一端的服務預期爲"http://localhost:3000/api/v1/store"服務參數如何防止被躲過了這場查詢字符串?

+2

我認爲你不能,另一端似乎是錯誤地處理它的URL參數。 – Ariejan

回答

1

你不能。它應該解碼這個參數的「另一方」(並且很可能是他們這樣做)。

例如,rails自動執行此編碼。您可以通過將您的某些操作更改爲raise params.pretty_inspect並使用額外的參數your/action/route?service=http%3A%2F%2Flocalhost%3A3000%2Fapi%2Fv1%2Fstore來調用它。你會看到這個參數包括service: http://localhost:3000/api/v1/store

如果這不是你的工作,你需要聯繫對方,讓他們實現這一點。沒有其他方式可以通過URL獲取網址。

5

對方應該避開params。如果你仍然想知道如何做到這一點然而here is the method uri.unescape這是用來像這樣:

require 'uri' 

enc_uri = URI.escape("http://example.com/?a=\11\15") 
p enc_uri 
# => "http://example.com/?a=%09%0D" 

p URI.unescape(enc_uri) 
# => "http://example.com/?a=\t\r" 

如果你想快速UNESCAPE一個URI(不要想打開一個REPL一些奇怪的原因或其他,就像也許它侮辱你的榮譽什麼的。)你可以嘗試this site