ルビ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を持つURI.parse(URI)を使用することができますし、エラーがスローされません。
なぜそれをURIで解析する必要がありますか? URIを持つURLの他の操作をしていますか、または他のパラメータをエンコードする必要がありますか? –
はい、基本的に私は広範囲に使用する宝石を修正していましたが、そのコードをすべて置き換えるのは本当にいいとは言えませんでした。したがって、URI#パースの動作を1か所で変更することをお勧めします:) –