An implementation of an HTTP proxy. To use it, instantiate it, then pass the instantiated object via the :proxy key to Net::SSH.start:
require 'net/ssh/proxy/http' proxy = Net::SSH::Proxy::HTTP.new('proxy.host', proxy_port) Net::SSH.start('host', 'user', :proxy => proxy) do |ssh| ... end
If the proxy requires authentication, you can pass :user and :password to the proxy's constructor:
proxy = Net::SSH::Proxy::HTTP.new('proxy.host', proxy_port, :user => "user", :password => "password")
Note that HTTP digest authentication is not supported; Basic only at this point.
The map of additional options that were given to the object at initialization.
The hostname or IP address of the HTTP proxy.
The port number of the proxy.
Create a new socket factory that tunnels via the given host and port. The
options
parameter is a hash of additional settings that can be
used to tweak this proxy connection. Specifically, the following options
are supported:
:user => the user name to use when authenticating to the proxy
:password => the password to use when authenticating
# File lib/net/ssh/proxy/http.rb, line 43 def initialize(proxy_host, proxy_port=80, options={}) @proxy_host = proxy_host @proxy_port = proxy_port @options = options end
Return a new socket connected to the given host and port via the proxy that was requested when the socket factory was instantiated.
# File lib/net/ssh/proxy/http.rb, line 51 def open(host, port) socket = TCPSocket.new(proxy_host, proxy_port) socket.write "CONNECT #{host}:#{port} HTTP/1.0\r\n" if options[:user] credentials = ["#{options[:user]}:#{options[:password]}"].pack("m*").gsub(%r\s/, "") socket.write "Proxy-Authorization: Basic #{credentials}\r\n" end socket.write "\r\n" resp = parse_response(socket) return socket if resp[:code] == 200 socket.close raise ConnectError, resp.inspect end