2016-09-28 5 views
3

にスラッシュとURLを解析する方法:私はこの形式のURLを持っているのuserinfo部分

https://clientjiberish:[email protected]/users?username=tralala 

私が行うとき:

url = 'https://clientjiberish:[email protected]/users?username=tralala' 
uri = URI(url) 

私は私が必要なものをすべて取得します。

uri.host => "api.example.com" 
uri.userinfo => "clientjiberish:clientsecretjiberish" 
uri.path => '/users' 
uri.scheme => 'https' 

userinfo部分にスラッシュがあると問題が発生します。私はAPIキーを提供するAPIを変更する権限がないので、URIの上記部分を抽出する方法を理解する必要があります。ここで

あなたはURIをテストすることができるものの例です:

url = 'https://clientjiberish:client/[email protected]/users?username=tralala' 
uri = URI(url) 

エラー:

URI::InvalidURIError: bad URI(is not URI?)

私はあなたがこのようなあなた自身のパーサーを作成できることを発見した:

parser = URI::Parser.new(:RESERVED => ";/?:@&=+$,\\[\\]") 
uri = parser.parse(url) 

しかし、それを動作させるには正規表現について十分に分かりません。

+1

'%2F'で' client/secretjiberish'のスラッシュからエスケープできませんか? – Rashmirathi

+0

@Rashmirathi どうすればアクセスできますか?私が次のようなことをした場合: escaped_url = URI.escape(url、 '/')そしてURI(url)URIメソッドを使うことはできません。 –

+0

私は、 'clientjiberish:client/secretjiberish'の部分でそれをエスケープするだけなので、urlは 'https:// clientjiberish:client%[email protected]/users?username = tralala'になります。 – Rashmirathi

答えて

0
url = 'https://clientjiberish:client/[email protected]/users?username=tralala' 
USER_INFO_REGEX = /\Ahttp[s]+:\/\/(.*)@.*\z/i 
user_info = USER_INFO_REGEX.match(url)[1] 
parsed_user_info = user_info.gsub(/\//, '%2F') 
url = url.gsub(Regexp.new(user_info), parsed_user_info) 
uri = URI(url) 

USER_INFO_REGEXhttps://@api.example.com...の間の文字列にマッチします。ユーザー情報の文字列をエスケープし、URLに置き換えてください。

関連する問題