Changeset 2397 for lang/ruby/ssb

Show
Ignore:
Timestamp:
12/04/07 13:22:59 (13 months ago)
Author:
lchin
Message:

lang/ruby/ssb: support http proxy

Location:
lang/ruby/ssb/trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • lang/ruby/ssb/trunk/libs/ssb/request.rb

    r2363 r2397  
    2929      end 
    3030      @term = SSB::Misc.load_terminal_info(in_cookie) 
     31      @http_proxy = ENV['HTTP_PROXY'] || ENV['http_proxy'] 
    3132      parse_query(in_query) 
    3233    end 
     
    3637                  cgi.query, 
    3738                  cgi.cookies) 
     39    end 
     40 
     41    def http_class(http_proxy = nil) 
     42      return Net::HTTP unless http_proxy 
     43      uri = URI.parse(http_proxy) 
     44      user, pass = uri.userinfo.split(/:/) if uri.userinfo 
     45      address = uri.host.untaint 
     46      port = uri.port.untaint 
     47      Net::HTTP.Proxy(address, port, user, pass) 
    3848    end 
    3949 
     
    4858    def execute 
    4959      response = nil 
    50       Net::HTTP.start(@uri.host.untaint, @uri.port.untaint) do |http| 
     60      http_class(@http_proxy).start(@uri.host.untaint, @uri.port.untaint) do |http| 
    5161        case method 
    5262        when 'GET' 
  • lang/ruby/ssb/trunk/test/request_test.rb

    r2288 r2397  
    3232 
    3333  def setup 
     34    @http_proxy, @HTTP_PROXY = ENV['HTTP_PROXY'], ENV['http_proxy'] 
     35    ENV['HTTP_PROXY'], ENV['http_proxy'] = nil, nil 
    3436    @request = SSB::Request.new('GET', request_params, cookie) 
     37  end 
     38 
     39  def teardown 
     40    ENV['HTTP_PROXY'], ENV['http_proxy'] = @http_proxy, @HTTP_PROXY 
    3541  end 
    3642 
     
    121127    mock_server.shutdown 
    122128  end 
     129 
     130  test 'no proxy' do 
     131    http_class = @request.http_class 
     132    connection = http_class.new("http://www.google.com") 
     133    assert(!connection.proxy?) 
     134  end 
     135 
     136  test 'regular http proxy' do 
     137    http_class = @request.http_class("http://my.proxy:1234") 
     138    connection = http_class.new("http://www.google.com") 
     139    assert(connection.proxy?) 
     140    assert_equal(connection.proxy_port, 1234) 
     141    assert_equal(connection.proxy_address, "my.proxy") 
     142  end 
     143 
     144  test 'http proxy with authorization' do 
     145    http_class = @request.http_class("http://benjamin:secret999@my.proxy:1234") 
     146    connection = http_class.new("http://www.google.com") 
     147    assert(connection.proxy?) 
     148    assert_equal(connection.proxy_user, "benjamin") 
     149    assert_equal(connection.proxy_pass, "secret999") 
     150  end 
    123151end 
    124