def open( host, port )
connect_string = "CONNECT #{host}:#{port} HTTP/1.0"
socket = TCPSocket.new( @proxy_host, @proxy_port )
socket.puts connect_string
socket.puts
resp = parse_response( socket )
return socket if resp[:code] == 200
socket.shutdown
raise ConnectError, resp.inspect unless resp[:code] == 407
user = proxy_user
passwd = proxy_password
raise UnauthorizedError, "no proxy user given" unless user
auth = resp[:headers]["Proxy-Authenticate"]
scheme, parms = auth.split( / /, 2 )
case scheme
when "Basic"
credentials =
Base64.encode64( "#{user}:#{passwd}" ).gsub( /\n/, "" )
else
raise NotImplementedError,
"authorization scheme #{scheme.inspect} is not supported"
end
socket = TCPSocket.new( @proxy_host, @proxy_port )
socket.puts connect_string
socket.puts "Proxy-Authorization: #{scheme} #{credentials}"
socket.puts
resp = parse_response( socket )
raise ConnectError, resp.inspect if resp[:code] != 200
return socket
end