From: kosaki.motohiro@... Date: 2016-05-20T06:06:50+00:00 Subject: [ruby-dev:49630] [Ruby trunk Bug#4388] open-uriで環境変数http_proxyを使うときに認証付きのProxyが使えません Issue #4388 has been updated by Motohiro KOSAKI. 実験してみたのですが、まずrubyの./configureの段階で、tool/downloader.rbがhttps接続を使うので、 open_httpのところのhttpsをはじく処理をコメントアウトしないと動きませんでした。 def OpenURI.open_http(buf, target, proxy, options) # :nodoc: if proxy proxy_uri, proxy_user, proxy_pass = proxy # raise "Non-HTTP proxy URI: #{proxy_uri}" if proxy_uri.class != URI::HTTP end httpsのときは、https_proxy環境変数読むので、URI::HTTPにならない気がするのですが、どういう意図なのでしょうか。 2つ目。環境変数から読むときは入力がURLなのに、URLエンコードを意識していないので、以下のようにしないと動きませんでした。 (たとえば、うちの会社だとproxy_userがメアドなので@をエンコードしてやらないといけない) diff --git a/lib/open-uri.rb b/lib/open-uri.rb index 489b83a..f588455 100644 --- a/lib/open-uri.rb +++ b/lib/open-uri.rb @@ -272,6 +272,8 @@ def OpenURI.open_http(buf, target, proxy, options) # :nodoc: if proxy unless proxy_user && proxy_pass proxy_user, proxy_pass = proxy_uri.userinfo.split(':') if proxy_uri.use + proxy_user = URI.decode_www_form_component(proxy_user) + proxy_pass = URI.decode_www_form_component(proxy_pass) end if proxy_user && proxy_pass klass = Net::HTTP::Proxy(proxy_uri.hostname, proxy_uri.port, proxy_user ただ、URI.decode漏れってここ以外にもいっぱいありそうな空気を感じるコードなので、修正がここだけでいいのか不安を感じています。 ---------------------------------------- Bug #4388: open-uriで環境変数http_proxyを使うときに認証付きのProxyが使えません https://bugs.ruby-lang.org/issues/4388#change-58764 * Author: あつし よしだ * Status: Rejected * Priority: Normal * Assignee: * ruby -v: - * Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN ---------------------------------------- =begin 内容はタイトルのままです。 パッチを添付しますのでよろしくお願いします。 =end ---Files-------------------------------- open-uri_with_http_proxy.patch (2.99 KB) -- https://bugs.ruby-lang.org/