glebtv-httpclient 3.1.1 → 3.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|