Использование ruby 1.9.2-p290. Я наткнулся на вопрос, пытаясь разобрать URI, как следующее:Разбор URI, имеющих фигурные скобки, URI :: InvalidURIError: плохой URI (не URI?)
require 'uri'
my_uri = "http://www.anyserver.com/getdata?anyparameter={330C-B5A2}"
the_uri = URI.parse(my_uri)
, выполнив следующую ошибку:
URI::InvalidURIError: bad URI(is not URI?)
мне требуется другое решение, чем при кодировании в фигурных скобках каждый раз, как это:
new_uri = URI.encode("http://www.anyserver.com/getdata?anyparameter={330C-B5A2}")
=> "http://www.anyserver.com/getdata?anyparameter=%7B330C-B5A2%7D"
Теперь я могу разобрать new_uri, как обычно, но должен был делать это каждый раз, когда мне это нужно. Каков самый простой способ достичь этого, не делая этого каждый раз?
Я отправляю свое решение, поскольку я не видел его точно так, как я его решил.
# Accepts URIs when they contain curly braces
# This overrides the DEFAULT_PARSER with the UNRESERVED key, including '{' and '}'
module URI
def self.parse(uri)
URI::Parser.new(:UNRESERVED => URI::REGEXP::PATTERN::UNRESERVED + "\{\}").parse(uri)
end
end
Теперь я могу использовать URI.parse (Uri) с URI, содержащие фигурные скобки и не отбрасывается никакой ошибки.
Зачем вам разбирать его с помощью URI? Вы делаете другие манипуляции с URL с URI, или есть другие параметры, которые необходимо закодировать? –
Да, в основном я модифицировал драгоценный камень, который его широко использует и заменяет весь этот код, не очень приятный, поэтому я предпочел изменить поведение разбора URI # в одном месте :) –