http 3.3.0 → 4.4.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/.gitignore +1 -0
- data/.rubocop.yml +3 -1
- data/.travis.yml +10 -7
- data/CHANGES.md +135 -0
- data/README.md +14 -10
- data/Rakefile +1 -1
- data/http.gemspec +12 -5
- data/lib/http.rb +1 -2
- data/lib/http/chainable.rb +20 -29
- data/lib/http/client.rb +25 -19
- data/lib/http/connection.rb +5 -9
- data/lib/http/feature.rb +14 -0
- data/lib/http/features/auto_deflate.rb +27 -6
- data/lib/http/features/auto_inflate.rb +33 -6
- data/lib/http/features/instrumentation.rb +64 -0
- data/lib/http/features/logging.rb +55 -0
- data/lib/http/features/normalize_uri.rb +17 -0
- data/lib/http/headers/known.rb +3 -0
- data/lib/http/options.rb +27 -21
- data/lib/http/redirector.rb +2 -1
- data/lib/http/request.rb +38 -30
- data/lib/http/request/body.rb +30 -1
- data/lib/http/request/writer.rb +21 -7
- data/lib/http/response.rb +7 -15
- data/lib/http/response/parser.rb +56 -16
- data/lib/http/timeout/global.rb +12 -14
- data/lib/http/timeout/per_operation.rb +5 -7
- data/lib/http/uri.rb +13 -0
- data/lib/http/version.rb +1 -1
- data/spec/lib/http/client_spec.rb +34 -7
- data/spec/lib/http/features/auto_inflate_spec.rb +38 -22
- data/spec/lib/http/features/instrumentation_spec.rb +56 -0
- data/spec/lib/http/features/logging_spec.rb +67 -0
- data/spec/lib/http/redirector_spec.rb +13 -0
- data/spec/lib/http/request/body_spec.rb +51 -0
- data/spec/lib/http/request/writer_spec.rb +20 -0
- data/spec/lib/http/request_spec.rb +6 -0
- data/spec/lib/http/response/parser_spec.rb +45 -0
- data/spec/lib/http/response_spec.rb +3 -4
- data/spec/lib/http_spec.rb +45 -65
- data/spec/regression_specs.rb +7 -0
- data/spec/support/dummy_server/servlet.rb +5 -0
- data/spec/support/http_handling_shared.rb +60 -64
- metadata +32 -21
- data/.ruby-version +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cce9a8685f3b60f994e77174f79c2306f607d62016bf64b74fcebc4f86377ec0
|
4
|
+
data.tar.gz: 353702b62a1b9d3b2ea86ac5ac3ad88e9efa734c77e180128fa06c6c301895d3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84ddc4cf98e603d175a9ecb8db03abd32187888070abd96a437c4121750ac2b86b6cada5d00d527b398ff4a403c2b6448d45bed61c45dbd3be8658f4ad38b121
|
7
|
+
data.tar.gz: 750edced9ae715483d750f0b18777f84a4ee24848ec761c67d2c5b89d00ebbc99fbc1e02932d3d30a33eaea43e1d081ba97bcacaf2231f6693e50d218ee24e87
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
AllCops:
|
2
|
+
TargetRubyVersion: 2.3
|
2
3
|
DisplayCopNames: true
|
3
4
|
|
4
5
|
## Layout ######################################################################
|
@@ -19,7 +20,8 @@ Metrics/AbcSize:
|
|
19
20
|
|
20
21
|
Metrics/BlockLength:
|
21
22
|
Exclude:
|
22
|
-
- spec/**/*
|
23
|
+
- "spec/**/*"
|
24
|
+
- "**/*.gemspec"
|
23
25
|
|
24
26
|
Metrics/BlockNesting:
|
25
27
|
Max: 2
|
data/.travis.yml
CHANGED
@@ -6,7 +6,7 @@ cache: bundler
|
|
6
6
|
before_install:
|
7
7
|
- gem update --system
|
8
8
|
- gem --version
|
9
|
-
- gem install bundler --no-
|
9
|
+
- gem install bundler --no-document
|
10
10
|
- bundle --version
|
11
11
|
|
12
12
|
install: bundle install --without development doc
|
@@ -17,20 +17,23 @@ env: JRUBY_OPTS="$JRUBY_OPTS --debug"
|
|
17
17
|
|
18
18
|
rvm:
|
19
19
|
# Include JRuby first because it takes the longest
|
20
|
-
- jruby-9.
|
21
|
-
- 2.
|
22
|
-
- 2.
|
23
|
-
- 2.
|
20
|
+
- jruby-9.2.5.0
|
21
|
+
- 2.3
|
22
|
+
- 2.4
|
23
|
+
- 2.5
|
24
|
+
- 2.6
|
25
|
+
- 2.7
|
24
26
|
|
25
27
|
matrix:
|
26
28
|
fast_finish: true
|
27
29
|
include:
|
28
30
|
# Only run RuboCop and Yardstick metrics on the latest Ruby
|
29
|
-
- rvm: 2.
|
31
|
+
- rvm: 2.7
|
30
32
|
env: SUITE="rubocop"
|
31
|
-
- rvm: 2.
|
33
|
+
- rvm: 2.7
|
32
34
|
env: SUITE="yardstick"
|
33
35
|
|
34
36
|
branches:
|
35
37
|
only:
|
36
38
|
- master
|
39
|
+
- 4-x-stable
|
data/CHANGES.md
CHANGED
@@ -1,3 +1,134 @@
|
|
1
|
+
## 4.4.1 (2020-03-29)
|
2
|
+
|
3
|
+
* Backport [#590](https://github.com/httprb/http/pull/590)
|
4
|
+
Fix parser failing on some edge cases.
|
5
|
+
([@ixti])
|
6
|
+
|
7
|
+
## 4.4.0 (2020-03-25)
|
8
|
+
|
9
|
+
* Backport [#587](https://github.com/httprb/http/pull/587)
|
10
|
+
Fix redirections when server responds with multiple Location headers.
|
11
|
+
([@ixti])
|
12
|
+
|
13
|
+
* Backport [#599](https://github.com/httprb/http/pull/599)
|
14
|
+
Allow passing HTTP::FormData::{Multipart,UrlEncoded} object directly.
|
15
|
+
([@ixti])
|
16
|
+
|
17
|
+
## 4.3.0 (2020-01-09)
|
18
|
+
|
19
|
+
* Backport [#581](https://github.com/httprb/http/pull/581)
|
20
|
+
Add Ruby-2.7 compatibility.
|
21
|
+
([@ixti], [@janko])
|
22
|
+
|
23
|
+
|
24
|
+
## 4.2.0 (2019-10-22)
|
25
|
+
|
26
|
+
* Backport [#489](https://github.com/httprb/http/pull/489)
|
27
|
+
Fix HTTP parser.
|
28
|
+
([@ixti], [@fxposter])
|
29
|
+
|
30
|
+
|
31
|
+
## 4.1.1 (2019-03-12)
|
32
|
+
|
33
|
+
* Add `HTTP::Headers::ACCEPT_ENCODING` constant.
|
34
|
+
([@ixti])
|
35
|
+
|
36
|
+
|
37
|
+
## 4.1.0 (2019-03-11)
|
38
|
+
|
39
|
+
* [#533](https://github.com/httprb/http/pull/533)
|
40
|
+
Add URI normalizer feature that allows to swap default URI normalizer.
|
41
|
+
([@mamoonraja])
|
42
|
+
|
43
|
+
|
44
|
+
## 4.0.5 (2019-02-15)
|
45
|
+
|
46
|
+
* Backport [#532](https://github.com/httprb/http/pull/532) from master.
|
47
|
+
Fix pipes support in request bodies.
|
48
|
+
([@ixti])
|
49
|
+
|
50
|
+
|
51
|
+
## 4.0.4 (2019-02-12)
|
52
|
+
|
53
|
+
* Backport [#506](https://github.com/httprb/http/pull/506) from master.
|
54
|
+
Skip auto-deflate when there is no body.
|
55
|
+
([@Bonias])
|
56
|
+
|
57
|
+
|
58
|
+
## 4.0.3 (2019-01-18)
|
59
|
+
|
60
|
+
* Fix missing URL in response wrapped by auto inflate.
|
61
|
+
([@ixti])
|
62
|
+
|
63
|
+
* Provide `HTTP::Request#inspect` method for debugging purposes.
|
64
|
+
([@ixti])
|
65
|
+
|
66
|
+
|
67
|
+
## 4.0.2 (2019-01-15)
|
68
|
+
|
69
|
+
* [#506](https://github.com/httprb/http/pull/506)
|
70
|
+
Fix instrumentation feature.
|
71
|
+
([@paul])
|
72
|
+
|
73
|
+
|
74
|
+
## 4.0.1 (2019-01-14)
|
75
|
+
|
76
|
+
* [#515](https://github.com/httprb/http/pull/515)
|
77
|
+
Fix `#build_request` and `#request` to respect default options.
|
78
|
+
([@RickCSong])
|
79
|
+
|
80
|
+
|
81
|
+
## 4.0.0 (2018-10-15)
|
82
|
+
|
83
|
+
* [#482](https://github.com/httprb/http/pull/482)
|
84
|
+
[#499](https://github.com/httprb/http/pull/499)
|
85
|
+
Introduce new features injection API with 2 new feaures: instrumentation
|
86
|
+
(compatible with ActiveSupport::Notification) and logging.
|
87
|
+
([@paul])
|
88
|
+
|
89
|
+
* [#473](https://github.com/httprb/http/pull/473)
|
90
|
+
Handle early responses.
|
91
|
+
([@janko-m])
|
92
|
+
|
93
|
+
* [#468](https://github.com/httprb/http/pull/468)
|
94
|
+
Rewind `HTTP::Request::Body#source` once `#each` is complete.
|
95
|
+
([@ixti])
|
96
|
+
|
97
|
+
* [#467](https://github.com/httprb/http/pull/467)
|
98
|
+
Drop Ruby 2.2 support.
|
99
|
+
([@ixti])
|
100
|
+
|
101
|
+
* [#436](https://github.com/httprb/http/pull/436)
|
102
|
+
Raise ConnectionError when writing to socket fails.
|
103
|
+
([@janko-m])
|
104
|
+
|
105
|
+
* [#438](https://github.com/httprb/http/pull/438)
|
106
|
+
Expose `HTTP::Request::Body#source`.
|
107
|
+
([@janko-m])
|
108
|
+
|
109
|
+
* [#446](https://github.com/httprb/http/pull/446)
|
110
|
+
Simplify setting a timeout.
|
111
|
+
([@mikegee])
|
112
|
+
|
113
|
+
* [#451](https://github.com/httprb/http/pull/451)
|
114
|
+
Reduce memory usage when reading response body.
|
115
|
+
([@janko-m])
|
116
|
+
|
117
|
+
* [#458](https://github.com/httprb/http/pull/458)
|
118
|
+
Extract HTTP::Client#build_request method.
|
119
|
+
([@tycoon])
|
120
|
+
|
121
|
+
* [#462](https://github.com/httprb/http/pull/462)
|
122
|
+
Fix HTTP::Request#headline to allow two leading slashes in path.
|
123
|
+
([@scarfacedeb])
|
124
|
+
|
125
|
+
* [#454](https://github.com/httprb/http/pull/454)
|
126
|
+
[#464](https://github.com/httprb/http/pull/464)
|
127
|
+
[#384](https://github.com/httprb/http/issues/384)
|
128
|
+
Fix #readpartial not respecting max length argument.
|
129
|
+
([@janko-m], [@marshall-lee])
|
130
|
+
|
131
|
+
|
1
132
|
## 3.3.0 (2018-04-25)
|
2
133
|
|
3
134
|
This version backports some of the fixes and improvements made to development
|
@@ -668,3 +799,7 @@ end
|
|
668
799
|
[@scarfacedeb]: https://github.com/scarfacedeb
|
669
800
|
[@mikegee]: https://github.com/mikegee
|
670
801
|
[@tycoon]: https://github.com/tycooon
|
802
|
+
[@paul]: https://github.com/paul
|
803
|
+
[@RickCSong]: https://github.com/RickCSong
|
804
|
+
[@fxposter]: https://github.com/fxposter
|
805
|
+
[@mamoonraja]: https://github.com/mamoonraja
|
data/README.md
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
# 
|
2
2
|
|
3
3
|
[](https://rubygems.org/gems/http)
|
4
|
-
[](https://github.com/httprb/http/blob/
|
4
|
+
[](https://travis-ci.org/httprb/http)
|
5
|
+
[](https://codeclimate.com/github/httprb/http)
|
6
|
+
[](https://coveralls.io/r/httprb/http)
|
7
|
+
[](https://github.com/httprb/http/blob/4-x-stable/LICENSE.txt)
|
8
8
|
|
9
|
-
|
9
|
+
[Documentation]
|
10
10
|
|
11
|
-
|
11
|
+
_NOTE: This is the 4.x **stable** branch. For the 3.x **stable** branch, please see:_
|
12
12
|
|
13
|
+
https://github.com/httprb/http/tree/3-x-stable
|
13
14
|
|
14
15
|
## About
|
15
16
|
|
@@ -108,7 +109,7 @@ require "http"
|
|
108
109
|
|
109
110
|
## Documentation
|
110
111
|
|
111
|
-
[Please see the http.rb wiki]
|
112
|
+
[Please see the http.rb wiki][documentation]
|
112
113
|
for more detailed documentation and usage notes.
|
113
114
|
|
114
115
|
The following API documentation is also available:
|
@@ -116,6 +117,8 @@ The following API documentation is also available:
|
|
116
117
|
* [YARD API documentation](http://www.rubydoc.info/gems/http/frames)
|
117
118
|
* [Chainable module (all chainable methods)](http://www.rubydoc.info/gems/http/HTTP/Chainable)
|
118
119
|
|
120
|
+
[documentation]: https://github.com/httprb/http/wiki
|
121
|
+
|
119
122
|
### Basic Usage
|
120
123
|
|
121
124
|
Here's some simple examples to get you started:
|
@@ -161,10 +164,11 @@ and call `#readpartial` on it repeatedly until it returns `nil`:
|
|
161
164
|
This library aims to support and is [tested against][travis] the following Ruby
|
162
165
|
versions:
|
163
166
|
|
164
|
-
* Ruby 2.2.x
|
165
167
|
* Ruby 2.3.x
|
166
168
|
* Ruby 2.4.x
|
167
|
-
*
|
169
|
+
* Ruby 2.5.x
|
170
|
+
* Ruby 2.6.x
|
171
|
+
* JRuby 9.2.x.x
|
168
172
|
|
169
173
|
If something doesn't work on one of these versions, it's a bug.
|
170
174
|
|
@@ -194,5 +198,5 @@ dropped.
|
|
194
198
|
|
195
199
|
## Copyright
|
196
200
|
|
197
|
-
Copyright (c) 2011-
|
201
|
+
Copyright (c) 2011-2019 Tony Arcieri, Alexey V. Zapparov, Erik Michaels-Ober, Zachary Anker.
|
198
202
|
See LICENSE.txt for further details.
|
data/Rakefile
CHANGED
@@ -25,7 +25,7 @@ task :generate_status_codes do
|
|
25
25
|
|
26
26
|
url = "http://www.iana.org/assignments/http-status-codes/http-status-codes.xml"
|
27
27
|
xml = Nokogiri::XML HTTP.get url
|
28
|
-
arr = xml.xpath("//xmlns:record").reduce
|
28
|
+
arr = xml.xpath("//xmlns:record").reduce([]) do |a, e|
|
29
29
|
code = e.xpath("xmlns:value").text.to_s
|
30
30
|
desc = e.xpath("xmlns:description").text.to_s
|
31
31
|
|
data/http.gemspec
CHANGED
@@ -25,12 +25,19 @@ 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.3"
|
29
29
|
|
30
|
-
gem.add_runtime_dependency "http_parser.rb", "~> 0.6.0"
|
31
|
-
gem.add_runtime_dependency "http-form_data", "~> 2.0"
|
32
|
-
gem.add_runtime_dependency "http-cookie", "~> 1.0"
|
33
30
|
gem.add_runtime_dependency "addressable", "~> 2.3"
|
31
|
+
gem.add_runtime_dependency "http-cookie", "~> 1.0"
|
32
|
+
gem.add_runtime_dependency "http-form_data", "~> 2.2"
|
33
|
+
gem.add_runtime_dependency "http-parser", "~> 1.2.0"
|
34
|
+
|
35
|
+
gem.add_development_dependency "bundler", "~> 2.0"
|
34
36
|
|
35
|
-
gem.
|
37
|
+
gem.metadata = {
|
38
|
+
"source_code_uri" => "https://github.com/httprb/http",
|
39
|
+
"wiki_uri" => "https://github.com/httprb/http/wiki",
|
40
|
+
"bug_tracker_uri" => "https://github.com/httprb/http/issues",
|
41
|
+
"changelog_uri" => "https://github.com/httprb/http/blob/v#{HTTP::VERSION}/CHANGES.md"
|
42
|
+
}
|
36
43
|
end
|
data/lib/http.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "http/parser"
|
4
|
-
|
5
3
|
require "http/errors"
|
6
4
|
require "http/timeout/null"
|
7
5
|
require "http/timeout/per_operation"
|
@@ -10,6 +8,7 @@ require "http/chainable"
|
|
10
8
|
require "http/client"
|
11
9
|
require "http/connection"
|
12
10
|
require "http/options"
|
11
|
+
require "http/feature"
|
13
12
|
require "http/request"
|
14
13
|
require "http/request/writer"
|
15
14
|
require "http/response"
|
data/lib/http/chainable.rb
CHANGED
@@ -70,45 +70,36 @@ module HTTP
|
|
70
70
|
end
|
71
71
|
|
72
72
|
# Make an HTTP request with the given verb
|
73
|
-
# @param
|
74
|
-
|
75
|
-
|
76
|
-
def request(verb, uri, options = {}) # rubocop:disable Style/OptionHash
|
77
|
-
branch(options).request verb, uri
|
73
|
+
# @param (see Client#request)
|
74
|
+
def request(*args)
|
75
|
+
branch(default_options).request(*args)
|
78
76
|
end
|
79
77
|
|
80
78
|
# Prepare an HTTP request with the given verb
|
81
|
-
# @param
|
82
|
-
|
83
|
-
|
84
|
-
def build_request(verb, uri, options = {}) # rubocop:disable Style/OptionHash
|
85
|
-
branch(options).build_request verb, uri
|
79
|
+
# @param (see Client#build_request)
|
80
|
+
def build_request(*args)
|
81
|
+
branch(default_options).build_request(*args)
|
86
82
|
end
|
87
83
|
|
88
84
|
# @overload timeout(options = {})
|
89
|
-
#
|
90
|
-
# @overload timeout(klass, options = {})
|
91
|
-
# Adds a timeout to the request.
|
92
|
-
# @param [#to_sym] klass
|
93
|
-
# either :null, :global, or :per_operation
|
85
|
+
# Adds per operation timeouts to the request
|
94
86
|
# @param [Hash] options
|
95
87
|
# @option options [Float] :read Read timeout
|
96
88
|
# @option options [Float] :write Write timeout
|
97
89
|
# @option options [Float] :connect Connect timeout
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
%i[read write connect].each do |k|
|
90
|
+
# @overload timeout(global_timeout)
|
91
|
+
# Adds a global timeout to the full request
|
92
|
+
# @param [Numeric] global_timeout
|
93
|
+
def timeout(options)
|
94
|
+
klass, options = case options
|
95
|
+
when Numeric then [HTTP::Timeout::Global, {:global => options}]
|
96
|
+
when Hash then [HTTP::Timeout::PerOperation, options]
|
97
|
+
when :null then [HTTP::Timeout::Null, {}]
|
98
|
+
else raise ArgumentError, "Use `.timeout(global_timeout_in_seconds)` or `.timeout(connect: x, write: y, read: z)`."
|
99
|
+
|
100
|
+
end
|
101
|
+
|
102
|
+
%i[global read write connect].each do |k|
|
112
103
|
next unless options.key? k
|
113
104
|
options["#{k}_timeout".to_sym] = options.delete k
|
114
105
|
end
|
data/lib/http/client.rb
CHANGED
@@ -4,6 +4,7 @@ require "forwardable"
|
|
4
4
|
|
5
5
|
require "http/form_data"
|
6
6
|
require "http/options"
|
7
|
+
require "http/feature"
|
7
8
|
require "http/headers"
|
8
9
|
require "http/connection"
|
9
10
|
require "http/redirector"
|
@@ -41,16 +42,19 @@ module HTTP
|
|
41
42
|
uri = make_request_uri(uri, opts)
|
42
43
|
headers = make_request_headers(opts)
|
43
44
|
body = make_request_body(opts, headers)
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
:
|
48
|
-
:
|
49
|
-
:
|
50
|
-
:
|
51
|
-
:body
|
52
|
-
:auto_deflate => opts.feature(:auto_deflate)
|
45
|
+
|
46
|
+
req = HTTP::Request.new(
|
47
|
+
:verb => verb,
|
48
|
+
:uri => uri,
|
49
|
+
:uri_normalizer => opts.feature(:normalize_uri)&.normalizer,
|
50
|
+
:proxy => opts.proxy,
|
51
|
+
:headers => headers,
|
52
|
+
:body => body
|
53
53
|
)
|
54
|
+
|
55
|
+
opts.features.inject(req) do |request, (_name, feature)|
|
56
|
+
feature.wrap_request(request)
|
57
|
+
end
|
54
58
|
end
|
55
59
|
|
56
60
|
# @!method persistent?
|
@@ -78,10 +82,13 @@ module HTTP
|
|
78
82
|
:proxy_headers => @connection.proxy_response_headers,
|
79
83
|
:connection => @connection,
|
80
84
|
:encoding => options.encoding,
|
81
|
-
:auto_inflate => options.feature(:auto_inflate),
|
82
85
|
:uri => req.uri
|
83
86
|
)
|
84
87
|
|
88
|
+
res = options.features.inject(res) do |response, (_name, feature)|
|
89
|
+
feature.wrap_response(response)
|
90
|
+
end
|
91
|
+
|
85
92
|
@connection.finish_response if req.verb == :head
|
86
93
|
@state = :clean
|
87
94
|
|
@@ -153,14 +160,6 @@ module HTTP
|
|
153
160
|
headers[Headers::COOKIE] = cookies
|
154
161
|
end
|
155
162
|
|
156
|
-
if (auto_deflate = opts.feature(:auto_deflate))
|
157
|
-
# We need to delete Content-Length header. It will be set automatically
|
158
|
-
# by HTTP::Request::Writer
|
159
|
-
headers.delete(Headers::CONTENT_LENGTH)
|
160
|
-
|
161
|
-
headers[Headers::CONTENT_ENCODING] = auto_deflate.method
|
162
|
-
end
|
163
|
-
|
164
163
|
headers
|
165
164
|
end
|
166
165
|
|
@@ -170,7 +169,7 @@ module HTTP
|
|
170
169
|
when opts.body
|
171
170
|
opts.body
|
172
171
|
when opts.form
|
173
|
-
form =
|
172
|
+
form = make_form_data(opts.form)
|
174
173
|
headers[Headers::CONTENT_TYPE] ||= form.content_type
|
175
174
|
form
|
176
175
|
when opts.json
|
@@ -179,5 +178,12 @@ module HTTP
|
|
179
178
|
body
|
180
179
|
end
|
181
180
|
end
|
181
|
+
|
182
|
+
def make_form_data(form)
|
183
|
+
return form if form.is_a? HTTP::FormData::Multipart
|
184
|
+
return form if form.is_a? HTTP::FormData::Urlencoded
|
185
|
+
|
186
|
+
HTTP::FormData.create(form)
|
187
|
+
end
|
182
188
|
end
|
183
189
|
end
|