Как я могу отменить эскейп этой строки запроса
Я посылаю этот запрос в службу:
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 ответа:
Это "другая сторона", которая должна расшифровать этот парам (и, скорее всего, они это делают).
Например, рельсы выполняют эту кодировку автоматически. Вы можете проверить это, изменив некоторые из ваших действий на
raise params.pretty_inspect
и вызвать его с дополнительным параметромyour/action/route?service=http%3A%2F%2Flocalhost%3A3000%2Fapi%2Fv1%2Fstore
. Вы увидите, что парамы включаютservice: http://localhost:3000/api/v1/store
.Если это не работает для вас эта шахта, что вам нужно войти в контакт с другой стороной, чтобы они реализовали это. Нет другого способа передать URL-адреса в get urls.
Другая сторона должна снимать эскапирование парамов. Если вы все еще хотите знать, как это сделать, однако Вот метод
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"
Если вы когда-нибудь захотите быстро снять эскейп uri (и не хотите открывать repl по какой-то странной причине, например, это может оскорбить вашу честь или что-то еще.) вы можете попробовать этот сайт