net-http-persistent 2.3.1 → 2.3.2
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.
- data.tar.gz.sig +0 -0
- data/History.txt +5 -0
- data/Manifest.txt +1 -1
- data/{README.txt → README.rdoc} +25 -0
- data/Rakefile +3 -0
- data/lib/net/http/persistent.rb +41 -2
- data/test/test_net_http_persistent.rb +74 -4
- metadata +7 -7
- metadata.gz.sig +0 -0
data.tar.gz.sig
CHANGED
Binary file
|
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
data/{README.txt → README.rdoc}
RENAMED
@@ -23,6 +23,31 @@ and retry according to RFC 2616.
|
|
23
23
|
* Pure ruby
|
24
24
|
* Timeout-less speed boost for Ruby 1.8 (by Aaron Patterson)
|
25
25
|
|
26
|
+
== SYNOPSIS
|
27
|
+
|
28
|
+
The following example will make two requests to the same server. The
|
29
|
+
connection is kept alive between requests:
|
30
|
+
|
31
|
+
require 'net/http/persistent'
|
32
|
+
|
33
|
+
uri = URI 'http://example.com/awesome/web/service'
|
34
|
+
|
35
|
+
http = Net::HTTP::Persistent.new 'my_app_name'
|
36
|
+
|
37
|
+
# perform a GET
|
38
|
+
response = http.request uri
|
39
|
+
|
40
|
+
# create a POST
|
41
|
+
post_uri = uri + 'create'
|
42
|
+
post = Net::HTTP::Post.new post_uri.path
|
43
|
+
post.set_form_data 'some' => 'cool data'
|
44
|
+
|
45
|
+
# perform the POST, the URI is always required
|
46
|
+
response http.request post_uri, post
|
47
|
+
|
48
|
+
Please see the documentation for +Net::HTTP::Persistent+ for more information,
|
49
|
+
including how to handle SSL connections.
|
50
|
+
|
26
51
|
== INSTALL:
|
27
52
|
|
28
53
|
gem install net-http-persistent
|
data/Rakefile
CHANGED
@@ -9,6 +9,9 @@ Hoe.plugin :minitest
|
|
9
9
|
Hoe.spec 'net-http-persistent' do |p|
|
10
10
|
developer 'Eric Hodel', 'drbrain@segment7.net'
|
11
11
|
|
12
|
+
self.readme_file = 'README.rdoc'
|
13
|
+
self.extra_rdoc_files += Dir['*.rdoc']
|
14
|
+
|
12
15
|
rdoc_locations <<
|
13
16
|
'docs.seattlerb.org:/data/www/docs.seattlerb.org/net-http-persistent/'
|
14
17
|
end
|
data/lib/net/http/persistent.rb
CHANGED
@@ -149,7 +149,7 @@ class Net::HTTP::Persistent
|
|
149
149
|
##
|
150
150
|
# The version of Net::HTTP::Persistent you are using
|
151
151
|
|
152
|
-
VERSION = '2.3.
|
152
|
+
VERSION = '2.3.2'
|
153
153
|
|
154
154
|
##
|
155
155
|
# Error class for errors raised by Net::HTTP::Persistent. Various
|
@@ -386,7 +386,7 @@ class Net::HTTP::Persistent
|
|
386
386
|
net_http_args.concat @proxy_args
|
387
387
|
end
|
388
388
|
|
389
|
-
connection = connections[connection_id]
|
389
|
+
connection = connections[connection_id]
|
390
390
|
|
391
391
|
unless connection = connections[connection_id] then
|
392
392
|
connections[connection_id] = http_class.new(*net_http_args)
|
@@ -480,6 +480,38 @@ class Net::HTTP::Persistent
|
|
480
480
|
retry_change_requests or idempotent?(req)
|
481
481
|
end
|
482
482
|
|
483
|
+
if RUBY_VERSION > '1.9' then
|
484
|
+
##
|
485
|
+
# Workaround for missing Net::HTTPHeader#connection_close? on Ruby 1.8
|
486
|
+
|
487
|
+
def connection_close? header
|
488
|
+
header.connection_close?
|
489
|
+
end
|
490
|
+
|
491
|
+
##
|
492
|
+
# Workaround for missing Net::HTTPHeader#connection_keep_alive? on Ruby 1.8
|
493
|
+
|
494
|
+
def connection_keep_alive? header
|
495
|
+
header.connection_keep_alive?
|
496
|
+
end
|
497
|
+
else
|
498
|
+
##
|
499
|
+
# Workaround for missing Net::HTTPRequest#connection_close? on Ruby 1.8
|
500
|
+
|
501
|
+
def connection_close? header
|
502
|
+
header['connection'] =~ /close/ or header['proxy-connection'] =~ /close/
|
503
|
+
end
|
504
|
+
|
505
|
+
##
|
506
|
+
# Workaround for missing Net::HTTPRequest#connection_keep_alive? on Ruby
|
507
|
+
# 1.8
|
508
|
+
|
509
|
+
def connection_keep_alive? header
|
510
|
+
header['connection'] =~ /keep-alive/ or
|
511
|
+
header['proxy-connection'] =~ /keep-alive/
|
512
|
+
end
|
513
|
+
end
|
514
|
+
|
483
515
|
##
|
484
516
|
# If a connection hasn't been used since max_age it will be reset and reused
|
485
517
|
|
@@ -587,6 +619,13 @@ class Net::HTTP::Persistent
|
|
587
619
|
begin
|
588
620
|
Thread.current[@request_key][connection_id] += 1
|
589
621
|
response = connection.request req, &block
|
622
|
+
|
623
|
+
if connection_close?(req) or
|
624
|
+
(response.http_version <= '1.0' and
|
625
|
+
not connection_keep_alive?(response)) or
|
626
|
+
connection_close?(response) then
|
627
|
+
connection.finish
|
628
|
+
end
|
590
629
|
rescue Net::HTTPBadResponse => e
|
591
630
|
message = error_message connection
|
592
631
|
|
@@ -99,10 +99,12 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
|
|
99
99
|
|
100
100
|
def connection
|
101
101
|
c = basic_connection
|
102
|
+
touts[c.object_id] = Time.now
|
102
103
|
|
103
104
|
def c.request(req)
|
104
105
|
@req = req
|
105
106
|
r = Net::HTTPResponse.allocate
|
107
|
+
r.instance_variable_set :@header, {}
|
106
108
|
def r.http_version() '1.1' end
|
107
109
|
def r.read_body() :read_body end
|
108
110
|
yield r if block_given?
|
@@ -575,7 +577,10 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
|
|
575
577
|
c = basic_connection
|
576
578
|
def c.request(*a)
|
577
579
|
if defined? @called then
|
578
|
-
Net::HTTPResponse.allocate
|
580
|
+
r = Net::HTTPResponse.allocate
|
581
|
+
r.instance_variable_set :@header, {}
|
582
|
+
def r.http_version() '1.1' end
|
583
|
+
r
|
579
584
|
else
|
580
585
|
@called = true
|
581
586
|
raise Net::HTTPBadResponse
|
@@ -629,7 +634,35 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
|
|
629
634
|
assert_equal 1, reqs[c.object_id]
|
630
635
|
end
|
631
636
|
|
632
|
-
def
|
637
|
+
def test_request_close_1_0
|
638
|
+
c = connection
|
639
|
+
|
640
|
+
def c.request req
|
641
|
+
@req = req
|
642
|
+
r = Net::HTTPResponse.allocate
|
643
|
+
r.instance_variable_set :@header, {}
|
644
|
+
def r.http_version() '1.0' end
|
645
|
+
def r.read_body() :read_body end
|
646
|
+
yield r if block_given?
|
647
|
+
r
|
648
|
+
end
|
649
|
+
|
650
|
+
request = Net::HTTP::Get.new @uri.request_uri
|
651
|
+
|
652
|
+
res = @http.request @uri, request
|
653
|
+
req = c.req
|
654
|
+
|
655
|
+
assert_kind_of Net::HTTPResponse, res
|
656
|
+
|
657
|
+
assert_kind_of Net::HTTP::Get, req
|
658
|
+
assert_equal '/path', req.path
|
659
|
+
assert_equal 'keep-alive', req['connection']
|
660
|
+
assert_equal '30', req['keep-alive']
|
661
|
+
|
662
|
+
assert c.finished?
|
663
|
+
end
|
664
|
+
|
665
|
+
def test_request_connection_close_request
|
633
666
|
c = connection
|
634
667
|
|
635
668
|
request = Net::HTTP::Get.new @uri.request_uri
|
@@ -644,6 +677,37 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
|
|
644
677
|
assert_equal '/path', req.path
|
645
678
|
assert_equal 'close', req['connection']
|
646
679
|
assert_equal nil, req['keep-alive']
|
680
|
+
|
681
|
+
assert c.finished?
|
682
|
+
end
|
683
|
+
|
684
|
+
def test_request_connection_close_response
|
685
|
+
c = connection
|
686
|
+
|
687
|
+
def c.request req
|
688
|
+
@req = req
|
689
|
+
r = Net::HTTPResponse.allocate
|
690
|
+
r.instance_variable_set :@header, {}
|
691
|
+
r['connection'] = 'close'
|
692
|
+
def r.http_version() '1.1' end
|
693
|
+
def r.read_body() :read_body end
|
694
|
+
yield r if block_given?
|
695
|
+
r
|
696
|
+
end
|
697
|
+
|
698
|
+
request = Net::HTTP::Get.new @uri.request_uri
|
699
|
+
|
700
|
+
res = @http.request @uri, request
|
701
|
+
req = c.req
|
702
|
+
|
703
|
+
assert_kind_of Net::HTTPResponse, res
|
704
|
+
|
705
|
+
assert_kind_of Net::HTTP::Get, req
|
706
|
+
assert_equal '/path', req.path
|
707
|
+
assert_equal 'keep-alive', req['connection']
|
708
|
+
assert_equal '30', req['keep-alive']
|
709
|
+
|
710
|
+
assert c.finished?
|
647
711
|
end
|
648
712
|
|
649
713
|
def test_request_invalid
|
@@ -664,7 +728,10 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
|
|
664
728
|
|
665
729
|
def c.request(*a)
|
666
730
|
if defined? @called then
|
667
|
-
Net::HTTPResponse.allocate
|
731
|
+
r = Net::HTTPResponse.allocate
|
732
|
+
r.instance_variable_set :@header, {}
|
733
|
+
def r.http_version() '1.1' end
|
734
|
+
r
|
668
735
|
else
|
669
736
|
@called = true
|
670
737
|
raise Errno::EINVAL, "write"
|
@@ -694,7 +761,10 @@ class TestNetHttpPersistent < MiniTest::Unit::TestCase
|
|
694
761
|
touts[c.object_id] = Time.now
|
695
762
|
def c.request(*a)
|
696
763
|
if defined? @called then
|
697
|
-
Net::HTTPResponse.allocate
|
764
|
+
r = Net::HTTPResponse.allocate
|
765
|
+
r.instance_variable_set :@header, {}
|
766
|
+
def r.http_version() '1.1' end
|
767
|
+
r
|
698
768
|
else
|
699
769
|
@called = true
|
700
770
|
raise Errno::ECONNRESET
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: net-http-persistent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 7
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 2.3.
|
9
|
+
- 2
|
10
|
+
version: 2.3.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Eric Hodel
|
@@ -36,7 +36,7 @@ cert_chain:
|
|
36
36
|
x52qPcexcYZR7w==
|
37
37
|
-----END CERTIFICATE-----
|
38
38
|
|
39
|
-
date: 2011-
|
39
|
+
date: 2011-11-09 00:00:00 Z
|
40
40
|
dependencies:
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: minitest
|
@@ -88,13 +88,13 @@ extensions: []
|
|
88
88
|
extra_rdoc_files:
|
89
89
|
- History.txt
|
90
90
|
- Manifest.txt
|
91
|
-
- README.
|
91
|
+
- README.rdoc
|
92
92
|
files:
|
93
93
|
- .autotest
|
94
94
|
- .gemtest
|
95
95
|
- History.txt
|
96
96
|
- Manifest.txt
|
97
|
-
- README.
|
97
|
+
- README.rdoc
|
98
98
|
- Rakefile
|
99
99
|
- lib/net/http/faster.rb
|
100
100
|
- lib/net/http/persistent.rb
|
@@ -107,7 +107,7 @@ licenses: []
|
|
107
107
|
post_install_message:
|
108
108
|
rdoc_options:
|
109
109
|
- --main
|
110
|
-
- README.
|
110
|
+
- README.rdoc
|
111
111
|
require_paths:
|
112
112
|
- lib
|
113
113
|
required_ruby_version: !ruby/object:Gem::Requirement
|
metadata.gz.sig
CHANGED
Binary file
|