http 4.3.0 → 4.4.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/CHANGES.md +10 -0
- data/lib/http/client.rb +8 -1
- data/lib/http/redirector.rb +2 -1
- data/lib/http/version.rb +1 -1
- data/spec/lib/http/client_spec.rb +21 -6
- data/spec/lib/http/redirector_spec.rb +13 -0
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c303ff626f5b57ed080d5d64d3ba7fd0a9eed5bc9463ff1035b1386dad36a9ab
|
4
|
+
data.tar.gz: 3bc824e2ab723de39556166ec821d8c9a3f14dc5bc8dd542e4ccadf916a2518a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e78a6c25816e48f36394d3e4d612d94b47eb45787ca74a1fd5f49372c3df1037e535a401392a3318bfcc7194a1afee361794aadab853ae420054f00015101d0
|
7
|
+
data.tar.gz: 9e1656f514777d0c5c149b273d9276b3c2affb93363c3cbc74a20c1a7fed039148564adad891459eac012415d4d1dee98238bcf3e6a0f3e978fa4263afa4925b
|
data/CHANGES.md
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
## 4.4.0 (2020-03-25)
|
2
|
+
|
3
|
+
* Backport [#587](https://github.com/httprb/http/pull/587)
|
4
|
+
Fix redirections when server responds with multiple Location headers.
|
5
|
+
([@ixti])
|
6
|
+
|
7
|
+
* Backport [#599](https://github.com/httprb/http/pull/599)
|
8
|
+
Allow passing HTTP::FormData::{Multipart,UrlEncoded} object directly.
|
9
|
+
([@ixti])
|
10
|
+
|
1
11
|
## 4.3.0 (2020-01-09)
|
2
12
|
|
3
13
|
* Backport [#581](https://github.com/httprb/http/pull/581)
|
data/lib/http/client.rb
CHANGED
@@ -169,7 +169,7 @@ module HTTP
|
|
169
169
|
when opts.body
|
170
170
|
opts.body
|
171
171
|
when opts.form
|
172
|
-
form =
|
172
|
+
form = make_form_data(opts.form)
|
173
173
|
headers[Headers::CONTENT_TYPE] ||= form.content_type
|
174
174
|
form
|
175
175
|
when opts.json
|
@@ -178,5 +178,12 @@ module HTTP
|
|
178
178
|
body
|
179
179
|
end
|
180
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
|
181
188
|
end
|
182
189
|
end
|
data/lib/http/redirector.rb
CHANGED
@@ -58,7 +58,8 @@ module HTTP
|
|
58
58
|
|
59
59
|
@response.flush
|
60
60
|
|
61
|
-
|
61
|
+
# XXX(ixti): using `Array#inject` to return `nil` if no Location header.
|
62
|
+
@request = redirect_to(@response.headers.get(Headers::LOCATION).inject(:+))
|
62
63
|
@response = yield @request
|
63
64
|
end
|
64
65
|
|
data/lib/http/version.rb
CHANGED
@@ -98,9 +98,8 @@ RSpec.describe HTTP::Client do
|
|
98
98
|
end
|
99
99
|
|
100
100
|
it "works like a charm in real world" do
|
101
|
-
|
102
|
-
|
103
|
-
expect(client.get(url).to_s).to include "support for non-ascii URIs"
|
101
|
+
expect(HTTP.follow.get("https://bit.ly/2UaBT4R").parse(:json)).
|
102
|
+
to include("url" => "https://httpbin.org/anything/könig")
|
104
103
|
end
|
105
104
|
end
|
106
105
|
end
|
@@ -190,6 +189,22 @@ RSpec.describe HTTP::Client do
|
|
190
189
|
|
191
190
|
client.get("http://example.com/", :form => {:foo => HTTP::FormData::Part.new("content")})
|
192
191
|
end
|
192
|
+
|
193
|
+
context "when passing an HTTP::FormData object directly" do
|
194
|
+
it "creates url encoded form data object" do
|
195
|
+
client = HTTP::Client.new
|
196
|
+
form_data = HTTP::FormData::Multipart.new(:foo => "bar")
|
197
|
+
|
198
|
+
allow(client).to receive(:perform)
|
199
|
+
|
200
|
+
expect(HTTP::Request).to receive(:new) do |opts|
|
201
|
+
expect(opts[:body]).to be form_data
|
202
|
+
expect(opts[:body].to_s).to match(/^Content-Disposition: form-data; name="foo"\r\n\r\nbar\r\n/m)
|
203
|
+
end
|
204
|
+
|
205
|
+
client.get("http://example.com/", :form => form_data)
|
206
|
+
end
|
207
|
+
end
|
193
208
|
end
|
194
209
|
|
195
210
|
describe "passing json" do
|
@@ -213,9 +228,9 @@ RSpec.describe HTTP::Client do
|
|
213
228
|
end
|
214
229
|
|
215
230
|
it "works like a charm in real world" do
|
216
|
-
url
|
217
|
-
|
218
|
-
expect(
|
231
|
+
url = "https://httpbin.org/anything/ö無"
|
232
|
+
|
233
|
+
expect(HTTP.follow.get(url).parse(:json)).to include("url" => url)
|
219
234
|
end
|
220
235
|
end
|
221
236
|
|
@@ -75,6 +75,19 @@ RSpec.describe HTTP::Redirector do
|
|
75
75
|
expect(res.to_s).to eq "foo"
|
76
76
|
end
|
77
77
|
|
78
|
+
it "concatenates multiple Location headers" do
|
79
|
+
req = HTTP::Request.new :verb => :head, :uri => "http://example.com"
|
80
|
+
headers = HTTP::Headers.new
|
81
|
+
|
82
|
+
%w[http://example.com /123].each { |loc| headers.add("Location", loc) }
|
83
|
+
|
84
|
+
res = redirector.perform(req, simple_response(301, "", headers)) do |redirect|
|
85
|
+
simple_response(200, redirect.uri.to_s)
|
86
|
+
end
|
87
|
+
|
88
|
+
expect(res.to_s).to eq "http://example.com/123"
|
89
|
+
end
|
90
|
+
|
78
91
|
context "following 300 redirect" do
|
79
92
|
context "with strict mode" do
|
80
93
|
let(:options) { {:strict => true} }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: http
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tony Arcieri
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2020-
|
14
|
+
date: 2020-03-25 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: addressable
|
@@ -186,7 +186,7 @@ metadata:
|
|
186
186
|
source_code_uri: https://github.com/httprb/http
|
187
187
|
wiki_uri: https://github.com/httprb/http/wiki
|
188
188
|
bug_tracker_uri: https://github.com/httprb/http/issues
|
189
|
-
changelog_uri: https://github.com/httprb/http/blob/v4.
|
189
|
+
changelog_uri: https://github.com/httprb/http/blob/v4.4.0/CHANGES.md
|
190
190
|
post_install_message:
|
191
191
|
rdoc_options: []
|
192
192
|
require_paths:
|
@@ -202,7 +202,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
202
202
|
- !ruby/object:Gem::Version
|
203
203
|
version: '0'
|
204
204
|
requirements: []
|
205
|
-
|
205
|
+
rubyforge_project:
|
206
|
+
rubygems_version: 2.7.6.2
|
206
207
|
signing_key:
|
207
208
|
specification_version: 4
|
208
209
|
summary: HTTP should be easy
|