class Bundler::URI::Generic

def find_proxy(env=ENV)

CGI_HTTP_PROXY can be used instead.
http_proxy is not used too if the variable is case insensitive.
So HTTP_PROXY is not used.
It's because HTTP_PROXY may be set by Proxy: header.
But http_proxy and HTTP_PROXY is treated specially under CGI environment.

are examined, too.
Note that capitalized variables (HTTP_PROXY, FTP_PROXY, NO_PROXY, etc.)

If the optional parameter +env+ is specified, it is used instead of ENV.

If there is no proper proxy, nil is returned.
ftp_proxy, no_proxy, etc.
The proxy Bundler::URI is obtained from environment variables such as http_proxy,
Returns a proxy Bundler::URI.
def find_proxy(env=ENV)
  raise BadURIError, "relative Bundler::URI: #{self}" if self.relative?
  name = self.scheme.downcase + '_proxy'
  proxy_uri = nil
  if name == 'http_proxy' && env.include?('REQUEST_METHOD') # CGI?
    # HTTP_PROXY conflicts with *_proxy for proxy settings and
    # HTTP_* for header information in CGI.
    # So it should be careful to use it.
    pairs = env.reject {|k, v| /\Ahttp_proxy\z/i !~ k }
    case pairs.length
    when 0 # no proxy setting anyway.
      proxy_uri = nil
    when 1
      k, _ = pairs.shift
      if k == 'http_proxy' && env[k.upcase] == nil
        # http_proxy is safe to use because ENV is case sensitive.
        proxy_uri = env[name]
      else
        proxy_uri = nil
      end
    else # http_proxy is safe to use because ENV is case sensitive.
      proxy_uri = env.to_hash[name]
    end
    if !proxy_uri
      # Use CGI_HTTP_PROXY.  cf. libwww-perl.
      proxy_uri = env["CGI_#{name.upcase}"]
    end
  elsif name == 'http_proxy'
    if RUBY_ENGINE == 'jruby' && p_addr = ENV_JAVA['http.proxyHost']
      p_port = ENV_JAVA['http.proxyPort']
      if p_user = ENV_JAVA['http.proxyUser']
        p_pass = ENV_JAVA['http.proxyPass']
        proxy_uri = "http://#{p_user}:#{p_pass}@#{p_addr}:#{p_port}"
      else
        proxy_uri = "http://#{p_addr}:#{p_port}"
      end
    else
      unless proxy_uri = env[name]
        if proxy_uri = env[name.upcase]
          warn 'The environment variable HTTP_PROXY is discouraged.  Use http_proxy.', uplevel: 1
        end
      end
    end
  else
    proxy_uri = env[name] || env[name.upcase]
  end
  if proxy_uri.nil? || proxy_uri.empty?
    return nil
  end
  if self.hostname
    begin
      addr = IPSocket.getaddress(self.hostname)
      return nil if /\A127\.|\A::1\z/ =~ addr
    rescue SocketError
    end
  end
  name = 'no_proxy'
  if no_proxy = env[name] || env[name.upcase]
    return nil unless Bundler::URI::Generic.use_proxy?(self.hostname, addr, self.port, no_proxy)
  end
  Bundler::URI.parse(proxy_uri)
end