glebtv-httpclient 3.1.1 → 3.2.0
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.
- checksums.yaml +4 -4
- data/.coveralls.yml +1 -0
- data/.gitignore +8 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +6 -0
- data/CHANGELOG.rdoc +653 -0
- data/Gemfile +12 -0
- data/Gemfile.lock +284 -0
- data/README.md +7 -2
- data/Rakefile +22 -0
- data/bin/httpclient +1 -1
- data/dist_key/cacerts.pem +1808 -0
- data/dist_key/cert.pem +24 -0
- data/dist_key/gen_dist_cert.rb +29 -0
- data/httpclient.gemspec +33 -0
- data/lib/httpclient.rb +59 -15
- data/lib/httpclient/lru_cache.rb +171 -0
- data/lib/httpclient/lru_threadsafe.rb +29 -0
- data/lib/httpclient/session.rb +52 -13
- data/lib/httpclient/ssl_config.rb +4 -3
- data/lib/httpclient/version.rb +1 -1
- data/sample/ssl/trust_certs/.keep_me +0 -0
- data/spec/http_message_spec.rb +124 -0
- data/spec/httpclient_spec.rb +322 -0
- data/spec/keepalive_spec.rb +129 -0
- data/spec/spec_helper.rb +40 -0
- data/spec/support/1024x768.gif +0 -0
- data/spec/support/1x1.png +0 -0
- data/spec/support/base_server.rb +36 -0
- data/spec/support/file.txt +1 -0
- data/spec/support/ht_helpers.rb +10 -0
- data/spec/support/main_server.rb +155 -0
- data/spec/support/proxy_server.rb +14 -0
- data/spec/support/test_servlet.rb +73 -0
- data/stress-test/Gemfile +4 -0
- data/stress-test/Gemfile.lock +16 -0
- data/stress-test/client.rb +72 -0
- data/stress-test/config.ru +4 -0
- data/stress-test/unicorn.conf +2 -0
- data/test.rb +19 -0
- data/test/helper.rb +4 -3
- data/test/test_httpclient.rb +19 -677
- metadata +226 -38
- data/lib/httpclient/timeout.rb +0 -140
- data/test/runner.rb +0 -2
metadata
CHANGED
@@ -1,15 +1,142 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: glebtv-httpclient
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- glebtv
|
8
|
+
- Hiroshi Nakamura
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
12
|
+
date: 2014-02-02 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: activesupport
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - '>='
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - '>='
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: PriorityQueue
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - '>='
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: addressable
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - '>='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
type: :runtime
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: bundler
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: rake
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - '>='
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: test-unit
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - '>='
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - '>='
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: rspec
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - '>='
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - '>='
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: rdoc
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - '>='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: coveralls
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - '>='
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0'
|
133
|
+
type: :development
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - '>='
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: '0'
|
13
140
|
description:
|
14
141
|
email: glebtv@gmail.com
|
15
142
|
executables:
|
@@ -17,59 +144,91 @@ executables:
|
|
17
144
|
extensions: []
|
18
145
|
extra_rdoc_files: []
|
19
146
|
files:
|
147
|
+
- .coveralls.yml
|
148
|
+
- .gitignore
|
149
|
+
- .ruby-gemset
|
150
|
+
- .ruby-version
|
151
|
+
- .travis.yml
|
152
|
+
- CHANGELOG.rdoc
|
153
|
+
- Gemfile
|
154
|
+
- Gemfile.lock
|
155
|
+
- README.md
|
156
|
+
- Rakefile
|
20
157
|
- bin/httpclient
|
21
|
-
-
|
158
|
+
- dist_key/cacerts.pem
|
159
|
+
- dist_key/cert.pem
|
160
|
+
- dist_key/gen_dist_cert.rb
|
161
|
+
- httpclient.gemspec
|
22
162
|
- lib/glebtv-httpclient.rb
|
163
|
+
- lib/hexdump.rb
|
164
|
+
- lib/httpclient.rb
|
165
|
+
- lib/httpclient/auth.rb
|
166
|
+
- lib/httpclient/cacert.p7s
|
23
167
|
- lib/httpclient/connection.rb
|
168
|
+
- lib/httpclient/cookie.rb
|
24
169
|
- lib/httpclient/http.rb
|
25
|
-
- lib/httpclient/version.rb
|
26
170
|
- lib/httpclient/include_client.rb
|
27
|
-
- lib/httpclient/
|
28
|
-
- lib/httpclient/
|
29
|
-
- lib/httpclient/util.rb
|
30
|
-
- lib/httpclient/timeout.rb
|
31
|
-
- lib/httpclient/ssl_config.rb
|
171
|
+
- lib/httpclient/lru_cache.rb
|
172
|
+
- lib/httpclient/lru_threadsafe.rb
|
32
173
|
- lib/httpclient/session.rb
|
33
|
-
- lib/httpclient/
|
34
|
-
- lib/
|
174
|
+
- lib/httpclient/ssl_config.rb
|
175
|
+
- lib/httpclient/util.rb
|
176
|
+
- lib/httpclient/version.rb
|
35
177
|
- lib/oauthclient.rb
|
36
|
-
- sample/
|
178
|
+
- sample/async.rb
|
179
|
+
- sample/auth.rb
|
180
|
+
- sample/cookie.rb
|
181
|
+
- sample/dav.rb
|
182
|
+
- sample/howto.rb
|
183
|
+
- sample/oauth_buzz.rb
|
184
|
+
- sample/oauth_friendfeed.rb
|
185
|
+
- sample/oauth_twitter.rb
|
186
|
+
- sample/ssl/0cert.pem
|
37
187
|
- sample/ssl/0key.pem
|
38
|
-
- sample/ssl/htdocs/index.html
|
39
188
|
- sample/ssl/1000cert.pem
|
40
|
-
- sample/ssl/0cert.pem
|
41
189
|
- sample/ssl/1000key.pem
|
190
|
+
- sample/ssl/htdocs/index.html
|
42
191
|
- sample/ssl/ssl_client.rb
|
192
|
+
- sample/ssl/trust_certs/.keep_me
|
193
|
+
- sample/ssl/webrick_httpsd.rb
|
43
194
|
- sample/stream.rb
|
44
|
-
- sample/async.rb
|
45
|
-
- sample/howto.rb
|
46
|
-
- sample/auth.rb
|
47
|
-
- sample/cookie.rb
|
48
|
-
- sample/wcat.rb
|
49
|
-
- sample/oauth_buzz.rb
|
50
195
|
- sample/thread.rb
|
51
|
-
- sample/
|
52
|
-
-
|
53
|
-
-
|
196
|
+
- sample/wcat.rb
|
197
|
+
- spec/http_message_spec.rb
|
198
|
+
- spec/httpclient_spec.rb
|
199
|
+
- spec/keepalive_spec.rb
|
200
|
+
- spec/spec_helper.rb
|
201
|
+
- spec/support/1024x768.gif
|
202
|
+
- spec/support/1x1.png
|
203
|
+
- spec/support/base_server.rb
|
204
|
+
- spec/support/file.txt
|
205
|
+
- spec/support/ht_helpers.rb
|
206
|
+
- spec/support/main_server.rb
|
207
|
+
- spec/support/proxy_server.rb
|
208
|
+
- spec/support/test_servlet.rb
|
209
|
+
- stress-test/Gemfile
|
210
|
+
- stress-test/Gemfile.lock
|
211
|
+
- stress-test/client.rb
|
212
|
+
- stress-test/config.ru
|
213
|
+
- stress-test/unicorn.conf
|
214
|
+
- test.rb
|
54
215
|
- test/ca-chain.cert
|
55
|
-
- test/
|
56
|
-
- test/htdigest
|
57
|
-
- test/server.key
|
58
|
-
- test/test_cookie.rb
|
216
|
+
- test/ca.cert
|
59
217
|
- test/client.cert
|
218
|
+
- test/client.key
|
219
|
+
- test/helper.rb
|
220
|
+
- test/htdigest
|
60
221
|
- test/htpasswd
|
61
222
|
- test/server.cert
|
62
|
-
- test/
|
63
|
-
- test/helper.rb
|
64
|
-
- test/test_auth.rb
|
223
|
+
- test/server.key
|
65
224
|
- test/sslsvr.rb
|
66
|
-
- test/client.key
|
67
|
-
- test/test_ssl.rb
|
68
225
|
- test/subca.cert
|
69
|
-
- test/
|
70
|
-
- test/
|
226
|
+
- test/test_auth.rb
|
227
|
+
- test/test_cookie.rb
|
228
|
+
- test/test_hexdump.rb
|
71
229
|
- test/test_httpclient.rb
|
72
|
-
-
|
230
|
+
- test/test_include_client.rb
|
231
|
+
- test/test_ssl.rb
|
73
232
|
homepage: http://github.com/glebtv/httpclient
|
74
233
|
licenses:
|
75
234
|
- ruby
|
@@ -90,9 +249,38 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
90
249
|
version: '0'
|
91
250
|
requirements: []
|
92
251
|
rubyforge_project:
|
93
|
-
rubygems_version: 2.1
|
252
|
+
rubygems_version: 2.2.1
|
94
253
|
signing_key:
|
95
254
|
specification_version: 4
|
96
255
|
summary: Fork of httpclient with some fixes and patches I needed. Please use original
|
97
256
|
gem instead
|
98
|
-
test_files:
|
257
|
+
test_files:
|
258
|
+
- spec/http_message_spec.rb
|
259
|
+
- spec/httpclient_spec.rb
|
260
|
+
- spec/keepalive_spec.rb
|
261
|
+
- spec/spec_helper.rb
|
262
|
+
- spec/support/1024x768.gif
|
263
|
+
- spec/support/1x1.png
|
264
|
+
- spec/support/base_server.rb
|
265
|
+
- spec/support/file.txt
|
266
|
+
- spec/support/ht_helpers.rb
|
267
|
+
- spec/support/main_server.rb
|
268
|
+
- spec/support/proxy_server.rb
|
269
|
+
- spec/support/test_servlet.rb
|
270
|
+
- test/ca-chain.cert
|
271
|
+
- test/ca.cert
|
272
|
+
- test/client.cert
|
273
|
+
- test/client.key
|
274
|
+
- test/helper.rb
|
275
|
+
- test/htdigest
|
276
|
+
- test/htpasswd
|
277
|
+
- test/server.cert
|
278
|
+
- test/server.key
|
279
|
+
- test/sslsvr.rb
|
280
|
+
- test/subca.cert
|
281
|
+
- test/test_auth.rb
|
282
|
+
- test/test_cookie.rb
|
283
|
+
- test/test_hexdump.rb
|
284
|
+
- test/test_httpclient.rb
|
285
|
+
- test/test_include_client.rb
|
286
|
+
- test/test_ssl.rb
|
data/lib/httpclient/timeout.rb
DELETED
@@ -1,140 +0,0 @@
|
|
1
|
-
# HTTPClient - HTTP client library.
|
2
|
-
# Copyright (C) 2000-2009 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
|
3
|
-
#
|
4
|
-
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
|
5
|
-
# redistribute it and/or modify it under the same terms of Ruby's license;
|
6
|
-
# either the dual license version in 2003, or any later version.
|
7
|
-
|
8
|
-
|
9
|
-
require 'timeout'
|
10
|
-
require 'thread'
|
11
|
-
|
12
|
-
|
13
|
-
class HTTPClient
|
14
|
-
|
15
|
-
|
16
|
-
# Replaces timeout.rb to avoid Thread creation and scheduling overhead.
|
17
|
-
#
|
18
|
-
# You should check another timeout replace in WEBrick.
|
19
|
-
# See lib/webrick/utils.rb in ruby/1.9.
|
20
|
-
#
|
21
|
-
# About this implementation:
|
22
|
-
# * Do not create Thread for each timeout() call. Just create 1 Thread for
|
23
|
-
# timeout scheduler.
|
24
|
-
# * Do not wakeup the scheduler thread so often. Let scheduler thread sleep
|
25
|
-
# until the nearest period.
|
26
|
-
if !defined?(JRUBY_VERSION) and RUBY_VERSION < '1.9'
|
27
|
-
class TimeoutScheduler
|
28
|
-
|
29
|
-
# Represents timeout period.
|
30
|
-
class Period
|
31
|
-
attr_reader :thread, :time
|
32
|
-
|
33
|
-
# Creates new Period.
|
34
|
-
def initialize(thread, time, ex)
|
35
|
-
@thread, @time, @ex = thread, time, ex
|
36
|
-
@lock = Mutex.new
|
37
|
-
end
|
38
|
-
|
39
|
-
# Raises if thread exists and alive.
|
40
|
-
def raise(message)
|
41
|
-
@lock.synchronize do
|
42
|
-
if @thread and @thread.alive?
|
43
|
-
@thread.raise(@ex, message)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
# Cancel this Period. Mutex is needed to avoid too-late exception.
|
49
|
-
def cancel
|
50
|
-
@lock.synchronize do
|
51
|
-
@thread = nil
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
# Creates new TimeoutScheduler.
|
57
|
-
def initialize
|
58
|
-
@pool = {}
|
59
|
-
@next = nil
|
60
|
-
@thread = start_timer_thread
|
61
|
-
end
|
62
|
-
|
63
|
-
# Registers new timeout period.
|
64
|
-
def register(thread, sec, ex)
|
65
|
-
period = Period.new(thread, Time.now + sec, ex || ::Timeout::Error)
|
66
|
-
@pool[period] = true
|
67
|
-
if @next.nil? or period.time < @next
|
68
|
-
begin
|
69
|
-
@thread.wakeup
|
70
|
-
rescue ThreadError
|
71
|
-
# Thread may be dead by fork.
|
72
|
-
@thread = start_timer_thread
|
73
|
-
end
|
74
|
-
end
|
75
|
-
period
|
76
|
-
end
|
77
|
-
|
78
|
-
# Cancels the given period.
|
79
|
-
def cancel(period)
|
80
|
-
@pool.delete(period)
|
81
|
-
period.cancel
|
82
|
-
end
|
83
|
-
|
84
|
-
private
|
85
|
-
|
86
|
-
def start_timer_thread
|
87
|
-
thread = Thread.new {
|
88
|
-
while true
|
89
|
-
if @pool.empty?
|
90
|
-
@next = nil
|
91
|
-
sleep
|
92
|
-
else
|
93
|
-
min, = @pool.min { |a, b| a[0].time <=> b[0].time }
|
94
|
-
@next = min.time
|
95
|
-
sec = @next - Time.now
|
96
|
-
if sec > 0
|
97
|
-
sleep(sec)
|
98
|
-
end
|
99
|
-
end
|
100
|
-
now = Time.now
|
101
|
-
@pool.keys.each do |period|
|
102
|
-
if period.time < now
|
103
|
-
period.raise('execution expired')
|
104
|
-
cancel(period)
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
}
|
109
|
-
Thread.pass while thread.status != 'sleep'
|
110
|
-
thread
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
class << self
|
115
|
-
# CAUTION: caller must aware of race condition.
|
116
|
-
def timeout_scheduler
|
117
|
-
@timeout_scheduler ||= TimeoutScheduler.new
|
118
|
-
end
|
119
|
-
end
|
120
|
-
timeout_scheduler # initialize at first time.
|
121
|
-
end
|
122
|
-
|
123
|
-
module Timeout
|
124
|
-
if !defined?(JRUBY_VERSION) and RUBY_VERSION < '1.9'
|
125
|
-
def timeout(sec, ex = nil, &block)
|
126
|
-
return yield if sec == nil or sec.zero?
|
127
|
-
scheduler = nil
|
128
|
-
begin
|
129
|
-
scheduler = HTTPClient.timeout_scheduler
|
130
|
-
period = scheduler.register(Thread.current, sec, ex)
|
131
|
-
yield(sec)
|
132
|
-
ensure
|
133
|
-
scheduler.cancel(period) if scheduler and period
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
|
140
|
-
end
|