Использование ruby 1.9.2-p290. Я столкнулся с проблемой, пытаясь проанализировать 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, содержащим фигурные скобки, и не выдается никакой ошибки.