http 4.4.1 → 5.0.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/.github/workflows/ci.yml +65 -0
- data/.gitignore +6 -10
- data/.rspec +0 -4
- data/.rubocop.yml +8 -110
- data/.rubocop/layout.yml +8 -0
- data/.rubocop/style.yml +32 -0
- data/.rubocop_todo.yml +192 -0
- data/.yardopts +1 -1
- data/CHANGES.md +112 -3
- data/Gemfile +18 -10
- data/LICENSE.txt +1 -1
- data/README.md +17 -20
- data/Rakefile +2 -10
- data/http.gemspec +3 -3
- data/lib/http/chainable.rb +23 -17
- data/lib/http/client.rb +36 -30
- data/lib/http/connection.rb +11 -7
- data/lib/http/content_type.rb +12 -7
- data/lib/http/feature.rb +3 -1
- data/lib/http/features/auto_deflate.rb +6 -6
- data/lib/http/features/auto_inflate.rb +6 -5
- data/lib/http/features/instrumentation.rb +1 -1
- data/lib/http/features/logging.rb +19 -21
- data/lib/http/headers.rb +50 -13
- data/lib/http/mime_type/adapter.rb +3 -1
- data/lib/http/mime_type/json.rb +1 -0
- data/lib/http/options.rb +5 -8
- data/lib/http/redirector.rb +2 -1
- data/lib/http/request.rb +28 -11
- data/lib/http/request/body.rb +1 -0
- data/lib/http/request/writer.rb +3 -2
- data/lib/http/response.rb +17 -15
- data/lib/http/response/body.rb +2 -2
- data/lib/http/response/inflater.rb +1 -1
- data/lib/http/response/parser.rb +74 -62
- data/lib/http/response/status.rb +4 -3
- data/lib/http/timeout/global.rb +17 -31
- data/lib/http/timeout/null.rb +2 -1
- data/lib/http/timeout/per_operation.rb +31 -54
- data/lib/http/uri.rb +5 -5
- data/lib/http/version.rb +1 -1
- data/spec/lib/http/client_spec.rb +119 -30
- data/spec/lib/http/connection_spec.rb +8 -5
- data/spec/lib/http/features/auto_inflate_spec.rb +4 -2
- data/spec/lib/http/features/instrumentation_spec.rb +28 -21
- data/spec/lib/http/features/logging_spec.rb +8 -9
- data/spec/lib/http/headers_spec.rb +53 -18
- data/spec/lib/http/options/headers_spec.rb +1 -1
- data/spec/lib/http/options/merge_spec.rb +16 -16
- data/spec/lib/http/redirector_spec.rb +46 -1
- data/spec/lib/http/request/writer_spec.rb +13 -1
- data/spec/lib/http/request_spec.rb +5 -5
- data/spec/lib/http/response/parser_spec.rb +33 -4
- data/spec/lib/http/response/status_spec.rb +3 -3
- data/spec/lib/http/response_spec.rb +5 -3
- data/spec/lib/http_spec.rb +30 -3
- data/spec/spec_helper.rb +21 -21
- data/spec/support/black_hole.rb +1 -1
- data/spec/support/dummy_server.rb +7 -7
- data/spec/support/dummy_server/servlet.rb +17 -6
- data/spec/support/fuubar.rb +21 -0
- data/spec/support/http_handling_shared.rb +4 -4
- data/spec/support/simplecov.rb +19 -0
- data/spec/support/ssl_helper.rb +4 -4
- metadata +18 -12
- data/.coveralls.yml +0 -1
- data/.travis.yml +0 -39
data/.yardopts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
--markup-provider=
|
|
1
|
+
--markup-provider=kramdown
|
|
2
2
|
--markup=markdown
|
data/CHANGES.md
CHANGED
|
@@ -1,9 +1,108 @@
|
|
|
1
|
-
##
|
|
1
|
+
## 5.0.1 (2021-06-26)
|
|
2
2
|
|
|
3
|
-
*
|
|
4
|
-
|
|
3
|
+
* [#670](https://github.com/httprb/http/pull/670)
|
|
4
|
+
Revert `Response#parse` behavior introduced in #540.
|
|
5
|
+
([@DannyBen])
|
|
6
|
+
|
|
7
|
+
* [#669](https://github.com/httprb/http/pull/669)
|
|
8
|
+
Prevent bodies from being resubmitted when following unsafe redirects.
|
|
9
|
+
([@odinhb])
|
|
10
|
+
|
|
11
|
+
* [#664](https://github.com/httprb/http/pull/664)
|
|
12
|
+
Bump llhttp-ffi to 0.3.0.
|
|
13
|
+
([@bryanp])
|
|
14
|
+
|
|
15
|
+
## 5.0.0 (2021-05-12)
|
|
16
|
+
|
|
17
|
+
* [#656](https://github.com/httprb/http/pull/656)
|
|
18
|
+
Handle connection timeouts in `Features`
|
|
19
|
+
([@semenyukdmitry])
|
|
20
|
+
|
|
21
|
+
* [#651](https://github.com/httprb/http/pull/651)
|
|
22
|
+
Replace `http-parser` with `llhttp`
|
|
23
|
+
([@bryanp])
|
|
24
|
+
|
|
25
|
+
* [#647](https://github.com/httprb/http/pull/647)
|
|
26
|
+
Add support for `MKCALENDAR` HTTP verb
|
|
27
|
+
([@meanphil])
|
|
28
|
+
|
|
29
|
+
* [#632](https://github.com/httprb/http/pull/632)
|
|
30
|
+
Respect the SSL context's `verify_hostname` value
|
|
31
|
+
([@colemannugent])
|
|
32
|
+
|
|
33
|
+
* [#625](https://github.com/httprb/http/pull/625)
|
|
34
|
+
Fix inflator with empty responses
|
|
35
|
+
([@LukaszMaslej])
|
|
36
|
+
|
|
37
|
+
* [#599](https://github.com/httprb/http/pull/599)
|
|
38
|
+
Allow passing `HTTP::FormData::{Multipart,UrlEncoded}` object directly.
|
|
39
|
+
([@ixti])
|
|
40
|
+
|
|
41
|
+
* [#593](https://github.com/httprb/http/pull/593)
|
|
42
|
+
[#592](https://github.com/httprb/http/issues/592)
|
|
43
|
+
Support informational (1XX) responses.
|
|
44
|
+
([@ixti])
|
|
45
|
+
|
|
46
|
+
* [#590](https://github.com/httprb/http/pull/590)
|
|
47
|
+
[#589](https://github.com/httprb/http/issues/589)
|
|
48
|
+
Fix response headers paring.
|
|
49
|
+
([@Bonias])
|
|
50
|
+
|
|
51
|
+
* [#587](https://github.com/httprb/http/pull/587)
|
|
52
|
+
[#585](https://github.com/httprb/http/issues/585)
|
|
53
|
+
Fix redirections when server responds with multiple Location headers.
|
|
5
54
|
([@ixti])
|
|
6
55
|
|
|
56
|
+
* [#581](https://github.com/httprb/http/pull/581)
|
|
57
|
+
[#582](https://github.com/httprb/http/issues/582)
|
|
58
|
+
Add Ruby 2.7.x support.
|
|
59
|
+
([@janko])
|
|
60
|
+
|
|
61
|
+
* [#577](https://github.com/httprb/http/pull/577)
|
|
62
|
+
Fix `Chainable#timeout` with frozen Hash.
|
|
63
|
+
([@antonvolkoff])
|
|
64
|
+
|
|
65
|
+
* [#576](https://github.com/httprb/http/pull/576)
|
|
66
|
+
[#524](https://github.com/httprb/http/issues/524)
|
|
67
|
+
Preserve header names casing.
|
|
68
|
+
([@joshuaflanagan])
|
|
69
|
+
|
|
70
|
+
* [#540](https://github.com/httprb/http/pull/540)
|
|
71
|
+
[#538](https://github.com/httprb/http/issues/538)
|
|
72
|
+
**BREAKING CHANGE**
|
|
73
|
+
Require explicit MIME type for Response#parse
|
|
74
|
+
([@ixti])
|
|
75
|
+
|
|
76
|
+
* [#532](https://github.com/httprb/http/pull/532)
|
|
77
|
+
Fix pipes support in request bodies.
|
|
78
|
+
([@ixti])
|
|
79
|
+
|
|
80
|
+
* [#530](https://github.com/httprb/http/pull/530)
|
|
81
|
+
Improve header fields name/value validation.
|
|
82
|
+
([@Bonias])
|
|
83
|
+
|
|
84
|
+
* [#506](https://github.com/httprb/http/pull/506)
|
|
85
|
+
[#521](https://github.com/httprb/http/issues/521)
|
|
86
|
+
Skip auto-deflate when there is no body.
|
|
87
|
+
([@Bonias])
|
|
88
|
+
|
|
89
|
+
* [#489](https://github.com/httprb/http/pull/489)
|
|
90
|
+
Fix HTTP parser.
|
|
91
|
+
([@ixti], [@fxposter])
|
|
92
|
+
|
|
93
|
+
* [#546](https://github.com/httprb/http/pull/546)
|
|
94
|
+
**BREAKING CHANGE**
|
|
95
|
+
Provide initiating `HTTP::Request` object on `HTTP::Response`.
|
|
96
|
+
([@joshuaflanagan])
|
|
97
|
+
|
|
98
|
+
* [#571](https://github.com/httprb/http/pull/571)
|
|
99
|
+
Drop Ruby 2.3.x support.
|
|
100
|
+
([@ixti])
|
|
101
|
+
|
|
102
|
+
* [3ed0c31](https://github.com/httprb/http/commit/3ed0c318eab6a8c390654cda17bf6df9e963c7d6)
|
|
103
|
+
Drop Ruby 2.4.x support.
|
|
104
|
+
|
|
105
|
+
|
|
7
106
|
## 4.4.0 (2020-03-25)
|
|
8
107
|
|
|
9
108
|
* Backport [#587](https://github.com/httprb/http/pull/587)
|
|
@@ -14,6 +113,7 @@
|
|
|
14
113
|
Allow passing HTTP::FormData::{Multipart,UrlEncoded} object directly.
|
|
15
114
|
([@ixti])
|
|
16
115
|
|
|
116
|
+
|
|
17
117
|
## 4.3.0 (2020-01-09)
|
|
18
118
|
|
|
19
119
|
* Backport [#581](https://github.com/httprb/http/pull/581)
|
|
@@ -803,3 +903,12 @@ end
|
|
|
803
903
|
[@RickCSong]: https://github.com/RickCSong
|
|
804
904
|
[@fxposter]: https://github.com/fxposter
|
|
805
905
|
[@mamoonraja]: https://github.com/mamoonraja
|
|
906
|
+
[@joshuaflanagan]: https://github.com/joshuaflanagan
|
|
907
|
+
[@antonvolkoff]: https://github.com/antonvolkoff
|
|
908
|
+
[@LukaszMaslej]: https://github.com/LukaszMaslej
|
|
909
|
+
[@colemannugent]: https://github.com/colemannugent
|
|
910
|
+
[@semenyukdmitry]: https://github.com/semenyukdmitry
|
|
911
|
+
[@bryanp]: https://github.com/bryanp
|
|
912
|
+
[@meanphil]: https://github.com/meanphil
|
|
913
|
+
[@odinhb]: https://github.com/odinhb
|
|
914
|
+
[@DannyBen]: https://github.com/DannyBen
|
data/Gemfile
CHANGED
|
@@ -5,30 +5,38 @@ ruby RUBY_VERSION
|
|
|
5
5
|
|
|
6
6
|
gem "rake"
|
|
7
7
|
|
|
8
|
+
# Ruby 3.0 does not ship it anymore.
|
|
9
|
+
# TODO: We should probably refactor specs to avoid need for it.
|
|
10
|
+
gem "webrick"
|
|
11
|
+
|
|
8
12
|
group :development do
|
|
9
13
|
gem "guard-rspec", :require => false
|
|
10
14
|
gem "nokogiri", :require => false
|
|
11
15
|
gem "pry", :require => false
|
|
12
16
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
17
|
+
# RSpec formatter
|
|
18
|
+
gem "fuubar", :require => false
|
|
19
|
+
|
|
20
|
+
platform :mri do
|
|
21
|
+
gem "pry-byebug"
|
|
16
22
|
end
|
|
17
23
|
end
|
|
18
24
|
|
|
19
25
|
group :test do
|
|
20
|
-
gem "
|
|
21
|
-
gem "certificate_authority", :require => false
|
|
26
|
+
gem "certificate_authority", "~> 1.0", :require => false
|
|
22
27
|
|
|
23
28
|
gem "backports"
|
|
24
29
|
|
|
25
|
-
gem "
|
|
26
|
-
gem "
|
|
30
|
+
gem "rubocop"
|
|
31
|
+
gem "rubocop-performance"
|
|
32
|
+
gem "rubocop-rake"
|
|
33
|
+
gem "rubocop-rspec"
|
|
27
34
|
|
|
28
|
-
gem "
|
|
29
|
-
gem "
|
|
35
|
+
gem "simplecov", :require => false
|
|
36
|
+
gem "simplecov-lcov", :require => false
|
|
30
37
|
|
|
31
|
-
gem "
|
|
38
|
+
gem "rspec", "~> 3.10"
|
|
39
|
+
gem "rspec-its"
|
|
32
40
|
|
|
33
41
|
gem "yardstick"
|
|
34
42
|
end
|
data/LICENSE.txt
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Copyright (c) 2011-
|
|
1
|
+
Copyright (c) 2011-2021 Tony Arcieri, Erik Michaels-Ober, Alexey V. Zapparov, Zachary Anker
|
|
2
2
|
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
4
|
a copy of this software and associated documentation files (the
|
data/README.md
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
# 
|
|
2
2
|
|
|
3
|
-
[](https://github.com/httprb/http/blob/4-x-stable/LICENSE.txt)
|
|
3
|
+
[](https://rubygems.org/gems/http)
|
|
4
|
+
[](https://github.com/httprb/http/actions?query=workflow:CI)
|
|
5
|
+
[](https://codeclimate.com/github/httprb/http)
|
|
6
|
+
[](https://github.com/httprb/http/blob/master/LICENSE.txt)
|
|
8
7
|
|
|
9
8
|
[Documentation]
|
|
10
9
|
|
|
11
|
-
_NOTE: This is the
|
|
10
|
+
_NOTE: This is the 5.x **development** branch. For the 4.x **stable** branch, please see:_
|
|
12
11
|
|
|
13
|
-
https://github.com/httprb/http/tree/
|
|
12
|
+
https://github.com/httprb/http/tree/4-x-stable
|
|
14
13
|
|
|
15
14
|
## About
|
|
16
15
|
|
|
@@ -18,13 +17,12 @@ HTTP (The Gem! a.k.a. http.rb) is an easy-to-use client library for making reque
|
|
|
18
17
|
from Ruby. It uses a simple method chaining system for building requests, similar to
|
|
19
18
|
Python's [Requests].
|
|
20
19
|
|
|
21
|
-
Under the hood, http.rb uses [
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
natively and outsources the parsing to native extensions.
|
|
20
|
+
Under the hood, http.rb uses the [llhttp] parser, a fast HTTP parsing native extension.
|
|
21
|
+
This library isn't just yet another wrapper around `Net::HTTP`. It implements the HTTP
|
|
22
|
+
protocol natively and outsources the parsing to native extensions.
|
|
25
23
|
|
|
26
24
|
[requests]: http://docs.python-requests.org/en/latest/
|
|
27
|
-
[
|
|
25
|
+
[llhttp]: https://llhttp.org/
|
|
28
26
|
|
|
29
27
|
|
|
30
28
|
## Another Ruby HTTP library? Why should I care?
|
|
@@ -114,8 +112,8 @@ for more detailed documentation and usage notes.
|
|
|
114
112
|
|
|
115
113
|
The following API documentation is also available:
|
|
116
114
|
|
|
117
|
-
* [YARD API documentation](
|
|
118
|
-
* [Chainable module (all chainable methods)](
|
|
115
|
+
* [YARD API documentation](https://www.rubydoc.info/github/httprb/http)
|
|
116
|
+
* [Chainable module (all chainable methods)](https://www.rubydoc.info/github/httprb/http/HTTP/Chainable)
|
|
119
117
|
|
|
120
118
|
[documentation]: https://github.com/httprb/http/wiki
|
|
121
119
|
|
|
@@ -164,11 +162,10 @@ and call `#readpartial` on it repeatedly until it returns `nil`:
|
|
|
164
162
|
This library aims to support and is [tested against][travis] the following Ruby
|
|
165
163
|
versions:
|
|
166
164
|
|
|
167
|
-
* Ruby 2.
|
|
168
|
-
* Ruby 2.
|
|
169
|
-
* Ruby
|
|
170
|
-
*
|
|
171
|
-
* JRuby 9.2.x.x
|
|
165
|
+
* Ruby 2.6
|
|
166
|
+
* Ruby 2.7
|
|
167
|
+
* Ruby 3.0
|
|
168
|
+
* JRuby 9.2
|
|
172
169
|
|
|
173
170
|
If something doesn't work on one of these versions, it's a bug.
|
|
174
171
|
|
|
@@ -198,5 +195,5 @@ dropped.
|
|
|
198
195
|
|
|
199
196
|
## Copyright
|
|
200
197
|
|
|
201
|
-
Copyright (c) 2011-
|
|
198
|
+
Copyright (c) 2011-2021 Tony Arcieri, Alexey V. Zapparov, Erik Michaels-Ober, Zachary Anker.
|
|
202
199
|
See LICENSE.txt for further details.
|
data/Rakefile
CHANGED
|
@@ -35,7 +35,7 @@ task :generate_status_codes do
|
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
File.open("./lib/http/response/status/reasons.rb", "w") do |io|
|
|
38
|
-
io.puts
|
|
38
|
+
io.puts <<~TPL
|
|
39
39
|
# AUTO-GENERATED FILE, DO NOT CHANGE IT MANUALLY
|
|
40
40
|
|
|
41
41
|
require "delegate"
|
|
@@ -61,12 +61,4 @@ task :generate_status_codes do
|
|
|
61
61
|
end
|
|
62
62
|
end
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
task :default => %i[spec rubocop verify_measurements]
|
|
66
|
-
else
|
|
67
|
-
case ENV["SUITE"]
|
|
68
|
-
when "rubocop" then task :default => :rubocop
|
|
69
|
-
when "yardstick" then task :default => :verify_measurements
|
|
70
|
-
else task :default => :spec
|
|
71
|
-
end
|
|
72
|
-
end
|
|
64
|
+
task :default => %i[spec rubocop verify_measurements]
|
data/http.gemspec
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
lib = File.expand_path("
|
|
3
|
+
lib = File.expand_path("lib", __dir__)
|
|
4
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
5
|
require "http/version"
|
|
6
6
|
|
|
@@ -25,12 +25,12 @@ Gem::Specification.new do |gem|
|
|
|
25
25
|
gem.require_paths = ["lib"]
|
|
26
26
|
gem.version = HTTP::VERSION
|
|
27
27
|
|
|
28
|
-
gem.required_ruby_version = ">= 2.
|
|
28
|
+
gem.required_ruby_version = ">= 2.5"
|
|
29
29
|
|
|
30
30
|
gem.add_runtime_dependency "addressable", "~> 2.3"
|
|
31
31
|
gem.add_runtime_dependency "http-cookie", "~> 1.0"
|
|
32
32
|
gem.add_runtime_dependency "http-form_data", "~> 2.2"
|
|
33
|
-
gem.add_runtime_dependency "
|
|
33
|
+
gem.add_runtime_dependency "llhttp-ffi", "~> 0.3.0"
|
|
34
34
|
|
|
35
35
|
gem.add_development_dependency "bundler", "~> 2.0"
|
|
36
36
|
|
data/lib/http/chainable.rb
CHANGED
|
@@ -9,63 +9,63 @@ module HTTP
|
|
|
9
9
|
# Request a get sans response body
|
|
10
10
|
# @param uri
|
|
11
11
|
# @option options [Hash]
|
|
12
|
-
def head(uri, options = {})
|
|
12
|
+
def head(uri, options = {})
|
|
13
13
|
request :head, uri, options
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
# Get a resource
|
|
17
17
|
# @param uri
|
|
18
18
|
# @option options [Hash]
|
|
19
|
-
def get(uri, options = {})
|
|
19
|
+
def get(uri, options = {})
|
|
20
20
|
request :get, uri, options
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
# Post to a resource
|
|
24
24
|
# @param uri
|
|
25
25
|
# @option options [Hash]
|
|
26
|
-
def post(uri, options = {})
|
|
26
|
+
def post(uri, options = {})
|
|
27
27
|
request :post, uri, options
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
# Put to a resource
|
|
31
31
|
# @param uri
|
|
32
32
|
# @option options [Hash]
|
|
33
|
-
def put(uri, options = {})
|
|
33
|
+
def put(uri, options = {})
|
|
34
34
|
request :put, uri, options
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
# Delete a resource
|
|
38
38
|
# @param uri
|
|
39
39
|
# @option options [Hash]
|
|
40
|
-
def delete(uri, options = {})
|
|
40
|
+
def delete(uri, options = {})
|
|
41
41
|
request :delete, uri, options
|
|
42
42
|
end
|
|
43
43
|
|
|
44
44
|
# Echo the request back to the client
|
|
45
45
|
# @param uri
|
|
46
46
|
# @option options [Hash]
|
|
47
|
-
def trace(uri, options = {})
|
|
47
|
+
def trace(uri, options = {})
|
|
48
48
|
request :trace, uri, options
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
# Return the methods supported on the given URI
|
|
52
52
|
# @param uri
|
|
53
53
|
# @option options [Hash]
|
|
54
|
-
def options(uri, options = {})
|
|
54
|
+
def options(uri, options = {})
|
|
55
55
|
request :options, uri, options
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
# Convert to a transparent TCP/IP tunnel
|
|
59
59
|
# @param uri
|
|
60
60
|
# @option options [Hash]
|
|
61
|
-
def connect(uri, options = {})
|
|
61
|
+
def connect(uri, options = {})
|
|
62
62
|
request :connect, uri, options
|
|
63
63
|
end
|
|
64
64
|
|
|
65
65
|
# Apply partial modifications to a resource
|
|
66
66
|
# @param uri
|
|
67
67
|
# @option options [Hash]
|
|
68
|
-
def patch(uri, options = {})
|
|
68
|
+
def patch(uri, options = {})
|
|
69
69
|
request :patch, uri, options
|
|
70
70
|
end
|
|
71
71
|
|
|
@@ -93,7 +93,7 @@ module HTTP
|
|
|
93
93
|
def timeout(options)
|
|
94
94
|
klass, options = case options
|
|
95
95
|
when Numeric then [HTTP::Timeout::Global, {:global => options}]
|
|
96
|
-
when Hash then [HTTP::Timeout::PerOperation, options]
|
|
96
|
+
when Hash then [HTTP::Timeout::PerOperation, options.dup]
|
|
97
97
|
when :null then [HTTP::Timeout::Null, {}]
|
|
98
98
|
else raise ArgumentError, "Use `.timeout(global_timeout_in_seconds)` or `.timeout(connect: x, write: y, read: z)`."
|
|
99
99
|
|
|
@@ -101,11 +101,12 @@ module HTTP
|
|
|
101
101
|
|
|
102
102
|
%i[global read write connect].each do |k|
|
|
103
103
|
next unless options.key? k
|
|
104
|
+
|
|
104
105
|
options["#{k}_timeout".to_sym] = options.delete k
|
|
105
106
|
end
|
|
106
107
|
|
|
107
108
|
branch default_options.merge(
|
|
108
|
-
:timeout_class
|
|
109
|
+
:timeout_class => klass,
|
|
109
110
|
:timeout_options => options
|
|
110
111
|
)
|
|
111
112
|
end
|
|
@@ -144,9 +145,10 @@ module HTTP
|
|
|
144
145
|
options = {:keep_alive_timeout => timeout}
|
|
145
146
|
p_client = branch default_options.merge(options).with_persistent host
|
|
146
147
|
return p_client unless block_given?
|
|
148
|
+
|
|
147
149
|
yield p_client
|
|
148
150
|
ensure
|
|
149
|
-
p_client
|
|
151
|
+
p_client&.close
|
|
150
152
|
end
|
|
151
153
|
|
|
152
154
|
# Make a request through an HTTP proxy
|
|
@@ -168,10 +170,10 @@ module HTTP
|
|
|
168
170
|
alias through via
|
|
169
171
|
|
|
170
172
|
# Make client follow redirects.
|
|
171
|
-
# @param
|
|
173
|
+
# @param options
|
|
172
174
|
# @return [HTTP::Client]
|
|
173
175
|
# @see Redirector#initialize
|
|
174
|
-
def follow(options = {})
|
|
176
|
+
def follow(options = {})
|
|
175
177
|
branch default_options.with_follow options
|
|
176
178
|
end
|
|
177
179
|
|
|
@@ -209,10 +211,11 @@ module HTTP
|
|
|
209
211
|
# @option opts [#to_s] :user
|
|
210
212
|
# @option opts [#to_s] :pass
|
|
211
213
|
def basic_auth(opts)
|
|
212
|
-
user
|
|
213
|
-
pass
|
|
214
|
+
user = opts.fetch(:user)
|
|
215
|
+
pass = opts.fetch(:pass)
|
|
216
|
+
creds = "#{user}:#{pass}"
|
|
214
217
|
|
|
215
|
-
auth("Basic
|
|
218
|
+
auth("Basic #{Base64.strict_encode64(creds)}")
|
|
216
219
|
end
|
|
217
220
|
|
|
218
221
|
# Get options for HTTP
|
|
@@ -236,6 +239,9 @@ module HTTP
|
|
|
236
239
|
# Turn on given features. Available features are:
|
|
237
240
|
# * auto_inflate
|
|
238
241
|
# * auto_deflate
|
|
242
|
+
# * instrumentation
|
|
243
|
+
# * logging
|
|
244
|
+
# * normalize_uri
|
|
239
245
|
# @param features
|
|
240
246
|
def use(*features)
|
|
241
247
|
branch default_options.with_features(features)
|