http-client 0.1.2 → 0.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.
- checksums.yaml +4 -4
- data/CHANGELOG +8 -0
- data/lib/http/client.rb +29 -6
- data/test/server.rb +1 -6
- data/test/test_request.rb +40 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 463b25c7e2306882b064f06c3b9d6a0b79b0c17c
|
4
|
+
data.tar.gz: a699f8db865ec291272e4405c2ceebb291253845
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f54e15e22e2cc94f29efd2c5a89143a6a9522b0c9afc2c6c9b6e82cbab0a9ba8f7f903033380e26a2c80f0a9da05737d9848630d65a7bdaad2c425e173467f33
|
7
|
+
data.tar.gz: f09b9d4be97f9b8c7f3f180fc8555982c286360c4db3f5be35042f2ccc7962b5dc9ddef08c8c9e8b9671f1422c230fb1bb50d750affe6ef900d13e0243d1f3e0
|
data/CHANGELOG
CHANGED
data/lib/http/client.rb
CHANGED
@@ -4,10 +4,12 @@ require 'openssl'
|
|
4
4
|
require 'uri'
|
5
5
|
require 'mime/types'
|
6
6
|
require 'http-cookie'
|
7
|
+
require 'stringio'
|
8
|
+
require 'zlib'
|
7
9
|
|
8
10
|
module HTTP
|
9
11
|
module Client
|
10
|
-
VERSION = '0.1
|
12
|
+
VERSION = '0.2.1'
|
11
13
|
|
12
14
|
GET = Net::HTTP::Get
|
13
15
|
HEAD = Net::HTTP::Head
|
@@ -20,6 +22,12 @@ module HTTP
|
|
20
22
|
SSL_VERIFY_NONE = OpenSSL::SSL::VERIFY_NONE
|
21
23
|
SSL_VERIFY_PEER = OpenSSL::SSL::VERIFY_PEER
|
22
24
|
|
25
|
+
class Error < StandardError;
|
26
|
+
end
|
27
|
+
|
28
|
+
class ArgumentError < Error;
|
29
|
+
end
|
30
|
+
|
23
31
|
class Request
|
24
32
|
VALID_PARAMETERS = %w(headers files query body auth timeout open_timeout ssl_timeout read_timeout max_redirects ssl_verify jar)
|
25
33
|
DEFAULT_HEADERS = {'User-Agent' => 'HTTP Client API/1.0'}
|
@@ -147,6 +155,7 @@ module HTTP
|
|
147
155
|
uri = uri.kind_of?(URI) ? uri : URI.parse(uri)
|
148
156
|
case uri
|
149
157
|
when URI::HTTP, URI::HTTPS
|
158
|
+
raise ArgumentError, "Invalid URI #{uri}" if uri.host.nil?
|
150
159
|
uri
|
151
160
|
when URI::Generic
|
152
161
|
if @delegate.uri
|
@@ -157,6 +166,8 @@ module HTTP
|
|
157
166
|
else
|
158
167
|
raise ArgumentError, "Invalid URI #{uri}"
|
159
168
|
end
|
169
|
+
rescue URI::InvalidURIError => e
|
170
|
+
raise ArgumentError, "Invalid URI #{uri}"
|
160
171
|
end
|
161
172
|
|
162
173
|
def create_request_delegate verb, uri, args
|
@@ -225,7 +236,7 @@ module HTTP
|
|
225
236
|
r.body = @delegate.body
|
226
237
|
end
|
227
238
|
else
|
228
|
-
raise
|
239
|
+
raise Error, "response #{code} should not result in redirection."
|
229
240
|
end
|
230
241
|
end
|
231
242
|
|
@@ -251,7 +262,7 @@ module HTTP
|
|
251
262
|
end # Request
|
252
263
|
|
253
264
|
class Response
|
254
|
-
attr_reader :last_effective_uri
|
265
|
+
attr_reader :last_effective_uri, :response
|
255
266
|
|
256
267
|
def initialize response, last_effective_uri
|
257
268
|
@response = response
|
@@ -259,15 +270,27 @@ module HTTP
|
|
259
270
|
end
|
260
271
|
|
261
272
|
def code
|
262
|
-
|
273
|
+
response.code.to_i
|
263
274
|
end
|
264
275
|
|
265
276
|
def headers
|
266
|
-
@headers ||= Hash[
|
277
|
+
@headers ||= Hash[response.each_header.entries]
|
267
278
|
end
|
268
279
|
|
269
280
|
def body
|
270
|
-
|
281
|
+
case headers['content-encoding'].to_s.downcase
|
282
|
+
when 'gzip'
|
283
|
+
gz = Zlib::GzipReader.new(StringIO.new(response.body))
|
284
|
+
begin
|
285
|
+
gz.read
|
286
|
+
ensure
|
287
|
+
gz.close
|
288
|
+
end
|
289
|
+
when 'deflate'
|
290
|
+
Zlib.inflate(response.body)
|
291
|
+
else
|
292
|
+
response.body
|
293
|
+
end
|
271
294
|
end
|
272
295
|
|
273
296
|
def inspect
|
data/test/server.rb
CHANGED
@@ -40,12 +40,7 @@ class TestServer
|
|
40
40
|
|
41
41
|
private
|
42
42
|
def find_port
|
43
|
-
@tcp = nil
|
44
|
-
for port in 32768..65535
|
45
|
-
@tcp = TCPServer.new('127.0.0.1', port) rescue nil
|
46
|
-
break if @tcp
|
47
|
-
end
|
48
|
-
|
43
|
+
@tcp = TCPServer.new('127.0.0.1', 0) rescue nil
|
49
44
|
@tcp or raise RuntimeError 'Unable to find a local TCP port to bind.'
|
50
45
|
port = @tcp.addr[1]
|
51
46
|
@tcp.close
|
data/test/test_request.rb
CHANGED
@@ -1,14 +1,21 @@
|
|
1
|
+
require 'zlib'
|
2
|
+
require 'stringio'
|
1
3
|
require_relative 'helper'
|
2
4
|
|
3
5
|
describe 'HTTP Client Request' do
|
4
6
|
it 'should reject invalid arguments' do
|
5
|
-
assert_raises(ArgumentError, 'invalid verb')
|
6
|
-
assert_raises(
|
7
|
-
|
7
|
+
assert_raises(HTTP::Client::ArgumentError, 'invalid verb') {HTTP::Client::Request.new(:foo, 'http://example.org/')}
|
8
|
+
assert_raises(HTTP::Client::ArgumentError, 'invalid uri') {HTTP::Client::Request.new(:get, 'http://')}
|
9
|
+
|
10
|
+
assert_raises(HTTP::Client::ArgumentError, 'invalid argument') do
|
11
|
+
HTTP::Client::Request.new(:get, 'http://example.org/', foo: 1)
|
12
|
+
end
|
8
13
|
end
|
9
14
|
|
10
15
|
it 'validates body based on request verb' do
|
11
|
-
assert_raises(ArgumentError, 'get cannot have body')
|
16
|
+
assert_raises(HTTP::Client::ArgumentError, 'get cannot have body') do
|
17
|
+
HTTP::Client::Request.new(:get, 'http://a.c', files: {test: __FILE__})
|
18
|
+
end
|
12
19
|
end
|
13
20
|
|
14
21
|
it 'allows creation of valid request object' do
|
@@ -158,4 +165,33 @@ describe 'HTTP Client Request' do
|
|
158
165
|
assert_equal data, qs['this']
|
159
166
|
assert_equal File.basename(__FILE__), qs['this'].filename # people should stop overloading / extending String!
|
160
167
|
end
|
168
|
+
|
169
|
+
it 'handles gzip and deflate compression schemes.' do
|
170
|
+
app = proc do |req|
|
171
|
+
case req.path
|
172
|
+
when '/gzip'
|
173
|
+
[
|
174
|
+
200,
|
175
|
+
{'content-encoding' => 'gzip'},
|
176
|
+
StringIO.new.tap {|io|
|
177
|
+
gz = Zlib::GzipWriter.new(io)
|
178
|
+
gz.write("Hello 1")
|
179
|
+
gz.close
|
180
|
+
}.string
|
181
|
+
]
|
182
|
+
when '/deflate'
|
183
|
+
[200, {'content-encoding' => 'deflate'}, Zlib.deflate("Hello 2")]
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
server = TestServer.new(app)
|
188
|
+
server.run
|
189
|
+
|
190
|
+
response = HTTP::Client.get("#{server.root}/gzip", headers: {'accept-encoding' => 'gzip;deflate'})
|
191
|
+
assert_equal 'Hello 1', response.body, 'gunzip ok'
|
192
|
+
|
193
|
+
response = HTTP::Client.get("#{server.root}/deflate", headers: {'accept-encoding' => 'gzip;deflate'})
|
194
|
+
assert_equal 'Hello 2', response.body, 'inflate ok'
|
195
|
+
server.stop
|
196
|
+
end
|
161
197
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: http-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bharanee Rathna
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-09-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mime-types
|