mirror of
https://github.com/hkalexling/Mango.git
synced 2026-03-20 00:00:48 -04:00
44 lines
1004 B
Crystal
44 lines
1004 B
Crystal
require "http_proxy"
|
|
|
|
# Monkey-patch `HTTP::Client` to make it respect the `*_PROXY`
|
|
# environment variables
|
|
module HTTP
|
|
class Client
|
|
private def self.exec(uri : URI, tls : TLSContext = nil)
|
|
Logger.debug "Setting proxy"
|
|
previous_def uri, tls do |client, path|
|
|
client.set_proxy get_proxy uri
|
|
yield client, path
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
private def get_proxy(uri : URI) : HTTP::Proxy::Client?
|
|
no_proxy = ENV["no_proxy"]? || ENV["NO_PROXY"]?
|
|
return if no_proxy &&
|
|
no_proxy.split(",").any? &.== uri.hostname
|
|
|
|
case uri.scheme
|
|
when "http"
|
|
env_to_proxy "http_proxy"
|
|
when "https"
|
|
env_to_proxy "https_proxy"
|
|
else
|
|
nil
|
|
end
|
|
end
|
|
|
|
private def env_to_proxy(key : String) : HTTP::Proxy::Client?
|
|
val = ENV[key.downcase]? || ENV[key.upcase]?
|
|
return if val.nil?
|
|
|
|
begin
|
|
uri = URI.parse val
|
|
HTTP::Proxy::Client.new uri.hostname.not_nil!, uri.port.not_nil!,
|
|
username: uri.user, password: uri.password
|
|
rescue
|
|
nil
|
|
end
|
|
end
|