httpclient 2.2.0.2 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. data/lib/httpclient.rb +5 -5
  2. data/lib/httpclient/cacert.p7s +12 -12
  3. data/lib/httpclient/cacert_sha1.p7s +12 -12
  4. data/lib/httpclient/http.rb +15 -8
  5. data/lib/httpclient/session.rb +6 -1
  6. data/lib/httpclient/ssl_config.rb +18 -14
  7. data/sample/async.rb +8 -0
  8. data/sample/auth.rb +11 -0
  9. data/sample/cookie.rb +18 -0
  10. data/sample/dav.rb +103 -0
  11. data/sample/howto.rb +49 -0
  12. data/sample/oauth_buzz.rb +57 -0
  13. data/sample/oauth_friendfeed.rb +59 -0
  14. data/sample/oauth_twitter.rb +61 -0
  15. data/sample/ssl/0cert.pem +22 -0
  16. data/sample/ssl/0key.pem +30 -0
  17. data/sample/ssl/1000cert.pem +19 -0
  18. data/sample/ssl/1000key.pem +18 -0
  19. data/sample/ssl/htdocs/index.html +10 -0
  20. data/sample/ssl/ssl_client.rb +22 -0
  21. data/sample/ssl/webrick_httpsd.rb +29 -0
  22. data/sample/stream.rb +21 -0
  23. data/sample/thread.rb +27 -0
  24. data/sample/wcat.rb +21 -0
  25. data/test/ca.cert +23 -0
  26. data/test/client.cert +19 -0
  27. data/test/client.key +15 -0
  28. data/test/helper.rb +99 -0
  29. data/test/htdigest +1 -0
  30. data/test/htpasswd +2 -0
  31. data/test/runner.rb +2 -0
  32. data/test/server.cert +19 -0
  33. data/test/server.key +15 -0
  34. data/test/sslsvr.rb +65 -0
  35. data/test/subca.cert +21 -0
  36. data/test/test_auth.rb +196 -0
  37. data/test/test_cookie.rb +398 -0
  38. data/test/test_http-access2.rb +497 -0
  39. data/test/test_httpclient.rb +1544 -0
  40. data/test/test_ssl.rb +215 -0
  41. metadata +53 -38
  42. data/lib/http-access2.rbc +0 -732
  43. data/lib/httpclient.rbc +0 -13559
  44. data/lib/httpclient/auth.rbc +0 -13772
  45. data/lib/httpclient/connection.rbc +0 -767
  46. data/lib/httpclient/cookie.rbc +0 -8442
  47. data/lib/httpclient/http.rbc +0 -14163
  48. data/lib/httpclient/session.rbc +0 -15846
  49. data/lib/httpclient/ssl_config.rbc +0 -5575
  50. data/lib/httpclient/timeout.rbc +0 -2411
  51. data/lib/httpclient/util.rbc +0 -1278
@@ -0,0 +1,15 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIICWwIBAAKBgQDRWssrK8Gyr+500hpLjCGR3+AHL8/hEJM5zKi/MgLWjTkvsgOw
3
+ bYwXOiNtAbR9y4/ucDq7EY+cMUMHES4uFaPTcOaAV0aZRmk8AgslN1tQgNS6ew7/
4
+ Luq3DcVeWkX8PYgR9VG0mD1MPfJ6+IFA5d3vKpdBkBgN4l46jjO0/2XfewIDAQAB
5
+ AoGAZcz8llWErtsV3QB9gNb3S/PNADGjqBFjReva8n3jG2k4sZSibpwWTwUaTNtT
6
+ ZQgjSRKRvH1hk9XwffNAvXAQZNNkuj/16gO2oO45nyLj4dO365ujLptWnVIWDHOE
7
+ uN0GeiZO+VzcCisT0WCq4tvtLeH8svrxzA8cbXIEyOK7NiECQQDwo2zPFyKAZ/Cu
8
+ lDJ6zKT+RjfWwW7DgWzirAlTrt4ViMaW+IaDH29TmQpb4V4NuR3Xi+2Xl4oicu6S
9
+ 36TW9+/FAkEA3rgfOQJuLlWSnw1RTGwvnC816a/W7iYYY7B+0U4cDbfWl7IoXT4y
10
+ M8nV/HESooviZLqBwzAYSoj3fFKYBKpGPwJAUO8GN5iWWA2dW3ooiDiv/X1sZmRk
11
+ dojfMFWgRW747tEzya8Ivq0h6kH8w+5GjeMG8Gn1nRiwsulo6Ckj7dEx6QJACyui
12
+ 7UIQ8qP6GZ4aYMHgVW4Mvy7Bkeo5OO7GPYs0Xv/EdJFL8vlGnVBXOjUVoS9w6Gpu
13
+ TbLg1QQvnX2rADjmEwJANxZO2GUkaWGsEif8aGW0x5g/IdaMGG27pTWk5zqix7P3
14
+ 1UDrdo/JOXhptovhRi06EppIxAxYmbh9vd9VN8Itlw==
15
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,99 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'test/unit'
3
+ require 'httpclient'
4
+ require 'webrick'
5
+ require 'webrick/httpproxy.rb'
6
+ require 'logger'
7
+ require 'stringio'
8
+ require 'cgi'
9
+ require 'webrick/httputils'
10
+
11
+
12
+ module Helper
13
+ Port = 17171
14
+ ProxyPort = 17172
15
+
16
+ def serverport
17
+ @serverport
18
+ end
19
+
20
+ def proxyport
21
+ @proxyport
22
+ end
23
+
24
+ def serverurl
25
+ "http://localhost:#{serverport}/"
26
+ end
27
+
28
+ def proxyurl
29
+ "http://localhost:#{proxyport}/"
30
+ end
31
+
32
+ def setup
33
+ @logger = Logger.new(STDERR)
34
+ @logger.level = Logger::Severity::FATAL
35
+ @proxyio = StringIO.new
36
+ @proxylogger = Logger.new(@proxyio)
37
+ @proxylogger.level = Logger::Severity::DEBUG
38
+ @server = @proxyserver = @client = nil
39
+ @server_thread = @proxyserver_thread = nil
40
+ @serverport = Port
41
+ @proxyport = ProxyPort
42
+ end
43
+
44
+ def teardown
45
+ teardown_client if @client
46
+ teardown_proxyserver if @proxyserver
47
+ teardown_server if @server
48
+ end
49
+
50
+ def setup_client
51
+ @client = HTTPClient.new
52
+ end
53
+
54
+ #def setup_server
55
+ # override it
56
+ # @server = WEBrick::HTTPServer.new(...)
57
+ # @server_thread = start_server_thread(@server)
58
+ #end
59
+
60
+ def setup_proxyserver
61
+ @proxyserver = WEBrick::HTTPProxyServer.new(
62
+ :BindAddress => "localhost",
63
+ :Logger => @proxylogger,
64
+ :Port => 0,
65
+ :AccessLog => []
66
+ )
67
+ @proxyport = @proxyserver.config[:Port]
68
+ @proxyserver_thread = start_server_thread(@proxyserver)
69
+ end
70
+
71
+ def teardown_client
72
+ @client.reset_all
73
+ end
74
+
75
+ def teardown_server
76
+ @server.shutdown
77
+ #@server_thread.kill
78
+ end
79
+
80
+ def teardown_proxyserver
81
+ @proxyserver.shutdown
82
+ #@proxyserver_thread.kill
83
+ end
84
+
85
+ def start_server_thread(server)
86
+ t = Thread.new {
87
+ Thread.current.abort_on_exception = true
88
+ server.start
89
+ }
90
+ while server.status != :Running
91
+ Thread.pass
92
+ unless t.alive?
93
+ t.join
94
+ raise
95
+ end
96
+ end
97
+ t
98
+ end
99
+ end
@@ -0,0 +1 @@
1
+ admin:auth:4302fe65caa32f27721949149ccd3083
@@ -0,0 +1,2 @@
1
+ admin:Qg266hq/YYKe2
2
+ guest:gbPc4vPCH.h12
@@ -0,0 +1,2 @@
1
+ require 'test/unit'
2
+ exit Test::Unit::AutoRunner.run(true, File.dirname($0))
@@ -0,0 +1,19 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIC/zCCAeegAwIBAgIBATANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQGDAJKUDES
3
+ MBAGA1UECgwJSklOLkdSLkpQMQwwCgYDVQQLDANSUlIxDjAMBgNVBAMMBVN1YkNB
4
+ MB4XDTA0MDEzMTAzMTMxNloXDTMzMDEyMzAzMTMxNlowQzELMAkGA1UEBgwCSlAx
5
+ EjAQBgNVBAoMCUpJTi5HUi5KUDEMMAoGA1UECwwDUlJSMRIwEAYDVQQDDAlsb2Nh
6
+ bGhvc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANFJTxWqup3nV9dsJAku
7
+ p+WaXnPNIzcpAA3qMGZDJTJsfa8Du7ZxTP0XJK5mETttBrn711cJxAuP3KjqnW9S
8
+ vtZ9lY2sXJ6Zj62sN5LwG3VVe25dI28yR1EsbHjJ5Zjf9tmggMC6am52dxuHbt5/
9
+ vHo4ngJuKE/U+eeGRivMn6gFAgMBAAGjgYUwgYIwDAYDVR0TAQH/BAIwADAxBglg
10
+ hkgBhvhCAQ0EJBYiUnVieS9PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAd
11
+ BgNVHQ4EFgQUpZIyygD9JxFYHHOTEuWOLbCKfckwCwYDVR0PBAQDAgWgMBMGA1Ud
12
+ JQQMMAoGCCsGAQUFBwMBMA0GCSqGSIb3DQEBBQUAA4IBAQBwAIj5SaBHaA5X31IP
13
+ CFCJiep96awfp7RANO0cuUj+ZpGoFn9d6FXY0g+Eg5wAkCNIzZU5NHN9xsdOpnUo
14
+ zIBbyTfQEPrge1CMWMvL6uGaoEXytq84VTitF/xBTky4KtTn6+es4/e7jrrzeUXQ
15
+ RC46gkHObmDT91RkOEGjHLyld2328jo3DIN/VTHIryDeVHDWjY5dENwpwdkhhm60
16
+ DR9IrNBbXWEe9emtguNXeN0iu1ux0lG1Hc6pWGQxMlRKNvGh0yZB9u5EVe38tOV0
17
+ jQaoNyL7qzcQoXD3Dmbi1p0iRmg/+HngISsz8K7k7MBNVsSclztwgCzTZOBiVtkM
18
+ rRlQ
19
+ -----END CERTIFICATE-----
@@ -0,0 +1,15 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIICXQIBAAKBgQDRSU8Vqrqd51fXbCQJLqflml5zzSM3KQAN6jBmQyUybH2vA7u2
3
+ cUz9FySuZhE7bQa5+9dXCcQLj9yo6p1vUr7WfZWNrFyemY+trDeS8Bt1VXtuXSNv
4
+ MkdRLGx4yeWY3/bZoIDAumpudncbh27ef7x6OJ4CbihP1PnnhkYrzJ+oBQIDAQAB
5
+ AoGBAIf4CstW2ltQO7+XYGoex7Hh8s9lTSW/G2vu5Hbr1LTHy3fzAvdq8MvVR12O
6
+ rk9fa+lU9vhzPc0NMB0GIDZ9GcHuhW5hD1Wg9OSCbTOkZDoH3CAFqonjh4Qfwv5W
7
+ IPAFn9KHukdqGXkwEMdErsUaPTy9A1V/aROVEaAY+HJgq/eZAkEA/BP1QMV04WEZ
8
+ Oynzz7/lLizJGGxp2AOvEVtqMoycA/Qk+zdKP8ufE0wbmCE3Qd6GoynavsHb6aGK
9
+ gQobb8zDZwJBANSK6MrXlrZTtEaeZuyOB4mAmRzGzOUVkUyULUjEx2GDT93ujAma
10
+ qm/2d3E+wXAkNSeRpjUmlQXy/2oSqnGvYbMCQQDRM+cYyEcGPUVpWpnj0shrF/QU
11
+ 9vSot/X1G775EMTyaw6+BtbyNxVgOIu2J+rqGbn3c+b85XqTXOPL0A2RLYkFAkAm
12
+ syhSDtE9X55aoWsCNZY/vi+i4rvaFoQ/WleogVQAeGVpdo7/DK9t9YWoFBIqth0L
13
+ mGSYFu9ZhvZkvQNV8eYrAkBJ+rOIaLDsmbrgkeDruH+B/9yrm4McDtQ/rgnOGYnH
14
+ LjLpLLOrgUxqpzLWe++EwSLwK2//dHO+SPsQJ4xsyQJy
15
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,65 @@
1
+ require 'webrick/https'
2
+ require 'logger'
3
+ require 'rbconfig'
4
+
5
+ PORT = 17171
6
+ DIR = File.dirname(File.expand_path(__FILE__))
7
+
8
+ def cert(filename)
9
+ OpenSSL::X509::Certificate.new(File.open(File.join(DIR, filename)) { |f|
10
+ f.read
11
+ })
12
+ end
13
+
14
+ def key(filename)
15
+ OpenSSL::PKey::RSA.new(File.open(File.join(DIR, filename)) { |f|
16
+ f.read
17
+ })
18
+ end
19
+
20
+ def do_hello(req, res)
21
+ res['content-type'] = 'text/html'
22
+ res.body = "hello"
23
+ end
24
+
25
+ logger = Logger.new(STDERR)
26
+ logger.level = Logger::Severity::FATAL # avoid logging SSLError (ERROR level)
27
+
28
+ server = WEBrick::HTTPServer.new(
29
+ :BindAddress => "localhost",
30
+ :Logger => logger,
31
+ :Port => PORT,
32
+ :AccessLog => [],
33
+ :DocumentRoot => DIR,
34
+ :SSLEnable => true,
35
+ :SSLCACertificateFile => File.join(DIR, 'ca.cert'),
36
+ :SSLCertificate => cert('server.cert'),
37
+ :SSLPrivateKey => key('server.key'),
38
+ :SSLVerifyClient => nil, #OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT|OpenSSL::SSL::VERIFY_PEER,
39
+ :SSLClientCA => cert('ca.cert'),
40
+ :SSLCertName => nil
41
+ )
42
+ trap(:INT) do
43
+ server.shutdown
44
+ end
45
+ [:hello].each do |sym|
46
+ server.mount(
47
+ "/#{sym}",
48
+ WEBrick::HTTPServlet::ProcHandler.new(method("do_#{sym}").to_proc)
49
+ )
50
+ end
51
+
52
+ t = Thread.new {
53
+ Thread.current.abort_on_exception = true
54
+ server.start
55
+ }
56
+ while server.status != :Running
57
+ sleep 0.1
58
+ unless t.alive?
59
+ t.join
60
+ raise
61
+ end
62
+ end
63
+ STDOUT.sync = true
64
+ puts $$
65
+ t.join
@@ -0,0 +1,21 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDaDCCAlCgAwIBAgIBATANBgkqhkiG9w0BAQUFADA8MQswCQYDVQQGDAJKUDES
3
+ MBAGA1UECgwJSklOLkdSLkpQMQwwCgYDVQQLDANSUlIxCzAJBgNVBAMMAkNBMB4X
4
+ DTA0MDEzMDAwNDMyN1oXDTM1MDEyMjAwNDMyN1owPzELMAkGA1UEBgwCSlAxEjAQ
5
+ BgNVBAoMCUpJTi5HUi5KUDEMMAoGA1UECwwDUlJSMQ4wDAYDVQQDDAVTdWJDQTCC
6
+ ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ0Ou7AyRcRXnB/kVHv/6kwe
7
+ ANzgg/DyJfsAUqW90m7Lu1nqyug8gK0RBd77yU0w5HOAMHTVSdpjZK0g2sgx4Mb1
8
+ d/213eL9TTl5MRVEChTvQr8q5DVG/8fxPPE7fMI8eOAzd98/NOAChk+80r4Sx7fC
9
+ kGVEE1bKwY1MrUsUNjOY2d6t3M4HHV3HX1V8ShuKfsHxgCmLzdI8U+5CnQedFgkm
10
+ 3e+8tr8IX5RR1wA1Ifw9VadF7OdI/bGMzog/Q8XCLf+WPFjnK7Gcx6JFtzF6Gi4x
11
+ 4dp1Xl45JYiVvi9zQ132wu8A1pDHhiNgQviyzbP+UjcB/tsOpzBQF8abYzgEkWEC
12
+ AwEAAaNyMHAwDwYDVR0TAQH/BAUwAwEB/zAxBglghkgBhvhCAQ0EJBYiUnVieS9P
13
+ cGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUlCjXWLsReYzH
14
+ LzsxwVnCXmKoB/owCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCJ/OyN
15
+ rT8Cq2Y+G2yA/L1EMRvvxwFBqxavqaqHl/6rwsIBFlB3zbqGA/0oec6MAVnYynq4
16
+ c4AcHTjx3bQ/S4r2sNTZq0DH4SYbQzIobx/YW8PjQUJt8KQdKMcwwi7arHP7A/Ha
17
+ LKu8eIC2nsUBnP4NhkYSGhbmpJK+PFD0FVtD0ZIRlY/wsnaZNjWWcnWF1/FNuQ4H
18
+ ySjIblqVQkPuzebv3Ror6ZnVDukn96Mg7kP4u6zgxOeqlJGRe1M949SS9Vudjl8X
19
+ SF4aZUUB9pQGhsqQJVqaz2OlhGOp9D0q54xko/rekjAIcuDjl1mdX4F2WRrzpUmZ
20
+ uY/bPeOBYiVsOYVe
21
+ -----END CERTIFICATE-----
@@ -0,0 +1,196 @@
1
+ require File.expand_path('helper', File.dirname(__FILE__))
2
+
3
+
4
+ class TestAuth < Test::Unit::TestCase
5
+ include Helper
6
+
7
+ def setup
8
+ super
9
+ setup_server
10
+ end
11
+
12
+ def teardown
13
+ super
14
+ end
15
+
16
+ def setup_server
17
+ @server = WEBrick::HTTPServer.new(
18
+ :BindAddress => "localhost",
19
+ :Logger => @logger,
20
+ :Port => 0,
21
+ :AccessLog => [],
22
+ :DocumentRoot => File.dirname(File.expand_path(__FILE__))
23
+ )
24
+ @serverport = @server.config[:Port]
25
+ @server.mount(
26
+ '/basic_auth',
27
+ WEBrick::HTTPServlet::ProcHandler.new(method(:do_basic_auth).to_proc)
28
+ )
29
+ @server.mount(
30
+ '/digest_auth',
31
+ WEBrick::HTTPServlet::ProcHandler.new(method(:do_digest_auth).to_proc)
32
+ )
33
+ @server.mount(
34
+ '/digest_sess_auth',
35
+ WEBrick::HTTPServlet::ProcHandler.new(method(:do_digest_sess_auth).to_proc)
36
+ )
37
+ htpasswd = File.join(File.dirname(__FILE__), 'htpasswd')
38
+ htpasswd_userdb = WEBrick::HTTPAuth::Htpasswd.new(htpasswd)
39
+ htdigest = File.join(File.dirname(__FILE__), 'htdigest')
40
+ htdigest_userdb = WEBrick::HTTPAuth::Htdigest.new(htdigest)
41
+ @basic_auth = WEBrick::HTTPAuth::BasicAuth.new(
42
+ :Realm => 'auth',
43
+ :UserDB => htpasswd_userdb
44
+ )
45
+ @digest_auth = WEBrick::HTTPAuth::DigestAuth.new(
46
+ :Algorithm => 'MD5',
47
+ :Realm => 'auth',
48
+ :UserDB => htdigest_userdb
49
+ )
50
+ @digest_sess_auth = WEBrick::HTTPAuth::DigestAuth.new(
51
+ :Algorithm => 'MD5-sess',
52
+ :Realm => 'auth',
53
+ :UserDB => htdigest_userdb
54
+ )
55
+ @server_thread = start_server_thread(@server)
56
+ end
57
+
58
+ def do_basic_auth(req, res)
59
+ @basic_auth.authenticate(req, res)
60
+ res['content-type'] = 'text/plain'
61
+ res.body = 'basic_auth OK'
62
+ end
63
+
64
+ def do_digest_auth(req, res)
65
+ @digest_auth.authenticate(req, res)
66
+ res['content-type'] = 'text/plain'
67
+ res['x-query'] = req.body
68
+ res.body = 'digest_auth OK' + req.query_string.to_s
69
+ end
70
+
71
+ def do_digest_sess_auth(req, res)
72
+ @digest_sess_auth.authenticate(req, res)
73
+ res['content-type'] = 'text/plain'
74
+ res['x-query'] = req.body
75
+ res.body = 'digest_sess_auth OK' + req.query_string.to_s
76
+ end
77
+
78
+ def test_basic_auth
79
+ c = HTTPClient.new
80
+ c.set_auth("http://localhost:#{serverport}/", 'admin', 'admin')
81
+ assert_equal('basic_auth OK', c.get_content("http://localhost:#{serverport}/basic_auth"))
82
+ end
83
+
84
+ def test_basic_auth_compat
85
+ c = HTTPClient.new
86
+ c.set_basic_auth("http://localhost:#{serverport}/", 'admin', 'admin')
87
+ assert_equal('basic_auth OK', c.get_content("http://localhost:#{serverport}/basic_auth"))
88
+ end
89
+
90
+ def test_BASIC_auth
91
+ c = HTTPClient.new
92
+ webrick_backup = @basic_auth.instance_eval { @auth_scheme }
93
+ #httpaccess2_backup = c.www_auth.basic_auth.instance_eval { @scheme }
94
+ begin
95
+ @basic_auth.instance_eval { @auth_scheme = "BASIC" }
96
+ c.www_auth.basic_auth.instance_eval { @scheme = "BASIC" }
97
+ c.set_auth("http://localhost:#{serverport}/", 'admin', 'admin')
98
+ assert_equal('basic_auth OK', c.get_content("http://localhost:#{serverport}/basic_auth"))
99
+ ensure
100
+ @basic_auth.instance_eval { @auth_scheme = webrick_backup }
101
+ #c.www_auth.basic_auth.instance_eval { @scheme = httpaccess2_backup }
102
+ end
103
+ end
104
+
105
+ def test_digest_auth
106
+ c = HTTPClient.new
107
+ c.set_auth("http://localhost:#{serverport}/", 'admin', 'admin')
108
+ assert_equal('digest_auth OK', c.get_content("http://localhost:#{serverport}/digest_auth"))
109
+ end
110
+
111
+ def test_digest_auth_with_block
112
+ c = HTTPClient.new
113
+ c.set_auth("http://localhost:#{serverport}/", 'admin', 'admin')
114
+ called = false
115
+ c.get_content("http://localhost:#{serverport}/digest_auth") do |str|
116
+ assert_equal('digest_auth OK', str)
117
+ called = true
118
+ end
119
+ assert(called)
120
+ #
121
+ called = false
122
+ c.get("http://localhost:#{serverport}/digest_auth") do |str|
123
+ assert_equal('digest_auth OK', str)
124
+ called = true
125
+ end
126
+ assert(called)
127
+ end
128
+
129
+ def test_digest_auth_with_post_io
130
+ c = HTTPClient.new
131
+ c.set_auth("http://localhost:#{serverport}/", 'admin', 'admin')
132
+ post_body = StringIO.new("1234567890")
133
+ assert_equal('1234567890', c.post("http://localhost:#{serverport}/digest_auth", post_body).header['x-query'][0])
134
+ #
135
+ post_body = StringIO.new("1234567890")
136
+ post_body.read(5)
137
+ assert_equal('67890', c.post("http://localhost:#{serverport}/digest_auth", post_body).header['x-query'][0])
138
+ end
139
+
140
+ def test_digest_auth_with_querystring
141
+ c = HTTPClient.new
142
+ c.debug_dev = STDERR if $DEBUG
143
+ c.set_auth("http://localhost:#{serverport}/", 'admin', 'admin')
144
+ assert_equal('digest_auth OKbar=baz', c.get_content("http://localhost:#{serverport}/digest_auth/foo?bar=baz"))
145
+ end
146
+
147
+ def test_digest_sess_auth
148
+ c = HTTPClient.new
149
+ c.set_auth("http://localhost:#{serverport}/", 'admin', 'admin')
150
+ assert_equal('digest_sess_auth OK', c.get_content("http://localhost:#{serverport}/digest_sess_auth"))
151
+ end
152
+
153
+ def test_proxy_auth
154
+ c = HTTPClient.new
155
+ c.set_proxy_auth('admin', 'admin')
156
+ c.test_loopback_http_response << "HTTP/1.0 407 Unauthorized\nProxy-Authenticate: Basic realm=\"foo\"\nContent-Length: 2\n\nNG"
157
+ c.test_loopback_http_response << "HTTP/1.0 200 OK\nContent-Length: 2\n\nOK"
158
+ c.debug_dev = str = ''
159
+ c.get_content('http://example.com/')
160
+ assert_match(/Proxy-Authorization: Basic YWRtaW46YWRtaW4=/, str)
161
+ end
162
+
163
+ def test_oauth
164
+ c = HTTPClient.new
165
+ config = HTTPClient::OAuth::Config.new(
166
+ :realm => 'http://photos.example.net/',
167
+ :consumer_key => 'dpf43f3p2l4k3l03',
168
+ :consumer_secret => 'kd94hf93k423kf44',
169
+ :token => 'nnch734d00sl2jdk',
170
+ :secret => 'pfkkdhi9sl3r4s00',
171
+ :version => '1.0',
172
+ :signature_method => 'HMAC-SHA1'
173
+ )
174
+ config.debug_timestamp = '1191242096'
175
+ config.debug_nonce = 'kllo9940pd9333jh'
176
+ c.www_auth.oauth.set_config('http://photos.example.net/', config)
177
+ c.www_auth.oauth.challenge('http://photos.example.net/')
178
+ c.test_loopback_http_response << "HTTP/1.0 200 OK\nContent-Length: 2\n\nOK"
179
+ c.debug_dev = str = ''
180
+ c.get_content('http://photos.example.net/photos', :file => 'vacation.jpg', :size => 'original')
181
+ assert(str.index(%q(GET /photos?file=vacation.jpg&size=original)))
182
+ assert(str.index(%q(Authorization: OAuth realm="http://photos.example.net/", oauth_consumer_key="dpf43f3p2l4k3l03", oauth_nonce="kllo9940pd9333jh", oauth_signature="tR3%2BTy81lMeYAr%2FFid0kMTYa%2FWM%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1191242096", oauth_token="nnch734d00sl2jdk", oauth_version="1.0")))
183
+ #
184
+ c.test_loopback_http_response << "HTTP/1.0 200 OK\nContent-Length: 2\n\nOK"
185
+ c.debug_dev = str = ''
186
+ c.get_content('http://photos.example.net/photos?file=vacation.jpg&size=original')
187
+ assert(str.index(%q(GET /photos?file=vacation.jpg&size=original)))
188
+ assert(str.index(%q(Authorization: OAuth realm="http://photos.example.net/", oauth_consumer_key="dpf43f3p2l4k3l03", oauth_nonce="kllo9940pd9333jh", oauth_signature="tR3%2BTy81lMeYAr%2FFid0kMTYa%2FWM%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1191242096", oauth_token="nnch734d00sl2jdk", oauth_version="1.0")))
189
+ #
190
+ c.test_loopback_http_response << "HTTP/1.0 200 OK\nContent-Length: 2\n\nOK"
191
+ c.debug_dev = str = ''
192
+ c.post_content('http://photos.example.net/photos', :file => 'vacation.jpg', :size => 'original')
193
+ assert(str.index(%q(POST /photos)))
194
+ assert(str.index(%q(Authorization: OAuth realm="http://photos.example.net/", oauth_consumer_key="dpf43f3p2l4k3l03", oauth_nonce="kllo9940pd9333jh", oauth_signature="wPkvxykrw%2BBTdCcGqKr%2B3I%2BPsiM%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1191242096", oauth_token="nnch734d00sl2jdk", oauth_version="1.0")))
195
+ end
196
+ end