mirror of
https://github.com/HoneyryderChuck/httpx.git
synced 2025-12-04 00:01:13 -05:00
ssh proxy: added support for https requests too
This commit is contained in:
parent
cf7b4bff94
commit
72f5fbdfc9
@ -6,7 +6,7 @@ module HTTPX
|
||||
module Plugins
|
||||
module Proxy
|
||||
module SSH
|
||||
def self.load_dependencies(klass, *)
|
||||
def self.load_dependencies(_klass, *)
|
||||
# klass.plugin(:proxy)
|
||||
require "net/ssh/gateway"
|
||||
end
|
||||
@ -31,13 +31,33 @@ module HTTPX
|
||||
@_gateway = Net::SSH::Gateway.new(ssh_uri.host, ssh_username, ssh_options)
|
||||
begin
|
||||
@_gateway.open(request_uri.host, request_uri.port) do |local_port|
|
||||
io = TCPSocket.open("localhost", local_port)
|
||||
io = build_gateway_socket(local_port, request_uri)
|
||||
super(*requests, **options.merge(io: io))
|
||||
end
|
||||
ensure
|
||||
@_gateway.shutdown!
|
||||
end
|
||||
end
|
||||
|
||||
def build_gateway_socket(port, request_uri)
|
||||
case request_uri.scheme
|
||||
when "https"
|
||||
ctx = OpenSSL::SSL::SSLContext.new
|
||||
ctx_options = SSL::TLS_OPTIONS.merge(@options.ssl)
|
||||
ctx.set_params(ctx_options) unless ctx_options.empty?
|
||||
sock = TCPSocket.open("localhost", port)
|
||||
io = OpenSSL::SSL::SSLSocket.new(sock, ctx)
|
||||
io.hostname = request_uri.host
|
||||
io.sync_close = true
|
||||
io.connect
|
||||
io.post_connection_check(request_uri.host) if ctx.verify_mode != OpenSSL::SSL::VERIFY_NONE
|
||||
io
|
||||
when "http"
|
||||
TCPSocket.open("localhost", port)
|
||||
else
|
||||
raise Error, "unexpected scheme: #{request_uri.scheme}"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
module OptionsMethods
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user