http 0.9.2 → 0.9.3
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 +14 -0
- data/lib/http/request.rb +15 -2
- data/lib/http/uri.rb +7 -2
- data/lib/http/version.rb +1 -1
- data/spec/lib/http/request_spec.rb +29 -4
- metadata +4 -34
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6d0fc648f6ef248aefe945523640200d4f0f77d2
|
4
|
+
data.tar.gz: e84a46fc898596c653dada5f8d8bcf82c5cc0eba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc8fa5eee19489bfcaa40a046e5699a8f7a99c439223041025348c30bc1e23ba1524692a17dc4d25ba6c1632a0df8923fb0e3f31908c4bdf226660a134ff67d1
|
7
|
+
data.tar.gz: 225d15b4e50168746f890d08be499a19ecdf39dc41e111e7471e720f8494d2f3eb305d50dcf1a5fe0f735a165168a53e927402ef4176ebe757780452c8fda334
|
data/CHANGES.md
CHANGED
@@ -1,6 +1,15 @@
|
|
1
|
+
## 0.9.3 (2015-08-19)
|
2
|
+
|
3
|
+
* Fixed request URI normalization. See #246. (@ixti)
|
4
|
+
- Avoids query component normalization
|
5
|
+
- Omits fragment component in headline
|
6
|
+
|
7
|
+
|
1
8
|
## 0.9.2 (2015-08-18)
|
9
|
+
|
2
10
|
* Fixed exceptionless NIO EOF handling. (@zanker)
|
3
11
|
|
12
|
+
|
4
13
|
## 0.9.1 (2015-08-14)
|
5
14
|
|
6
15
|
* Fix params special-chars escaping. See #246. (@ixti)
|
@@ -12,6 +21,11 @@
|
|
12
21
|
* JRuby 9000 compatibility
|
13
22
|
|
14
23
|
|
24
|
+
## 0.8.14 (2015-08-19)
|
25
|
+
|
26
|
+
* Backport request URI normalization fixes from master. (@ixti)
|
27
|
+
|
28
|
+
|
15
29
|
## 0.8.13 (2015-08-14)
|
16
30
|
|
17
31
|
* Backport params special-chars escaping fix from `v0.9.1`. (@ixti)
|
data/lib/http/request.rb
CHANGED
@@ -66,7 +66,7 @@ module HTTP
|
|
66
66
|
# :nodoc:
|
67
67
|
def initialize(verb, uri, headers = {}, proxy = {}, body = nil, version = "1.1") # rubocop:disable ParameterLists
|
68
68
|
@verb = verb.to_s.downcase.to_sym
|
69
|
-
@uri =
|
69
|
+
@uri = normalize_uri uri
|
70
70
|
@scheme = @uri.scheme && @uri.scheme.to_s.downcase.to_sym
|
71
71
|
|
72
72
|
fail(UnsupportedMethodError, "unknown method: #{verb}") unless METHODS.include?(@verb)
|
@@ -123,7 +123,7 @@ module HTTP
|
|
123
123
|
# Compute HTTP request header for direct or proxy request
|
124
124
|
def headline
|
125
125
|
request_uri = using_proxy? ? uri : uri.omit(:scheme, :authority)
|
126
|
-
"#{verb.to_s.upcase} #{request_uri} HTTP/#{version}"
|
126
|
+
"#{verb.to_s.upcase} #{request_uri.omit :fragment} HTTP/#{version}"
|
127
127
|
end
|
128
128
|
|
129
129
|
# @deprecated Will be removed in 1.0.0
|
@@ -172,5 +172,18 @@ module HTTP
|
|
172
172
|
def default_host_header_value
|
173
173
|
PORTS[@scheme] != port ? "#{host}:#{port}" : host
|
174
174
|
end
|
175
|
+
|
176
|
+
# @return [HTTP::URI] URI with all componentes but query being normalized.
|
177
|
+
def normalize_uri(uri)
|
178
|
+
uri = HTTP::URI.parse uri
|
179
|
+
|
180
|
+
HTTP::URI.new(
|
181
|
+
:scheme => uri.normalized_scheme,
|
182
|
+
:authority => uri.normalized_authority,
|
183
|
+
:path => uri.normalized_path,
|
184
|
+
:query => uri.query,
|
185
|
+
:fragment => uri.normalized_fragment
|
186
|
+
)
|
187
|
+
end
|
175
188
|
end
|
176
189
|
end
|
data/lib/http/uri.rb
CHANGED
@@ -2,10 +2,10 @@ require "addressable/uri"
|
|
2
2
|
|
3
3
|
module HTTP
|
4
4
|
class URI < Addressable::URI
|
5
|
-
#
|
5
|
+
# @private
|
6
6
|
HTTP_SCHEME = "http".freeze
|
7
7
|
|
8
|
-
#
|
8
|
+
# @private
|
9
9
|
HTTPS_SCHEME = "https".freeze
|
10
10
|
|
11
11
|
# @return [True] if URI is HTTP
|
@@ -19,5 +19,10 @@ module HTTP
|
|
19
19
|
def https?
|
20
20
|
HTTPS_SCHEME == scheme
|
21
21
|
end
|
22
|
+
|
23
|
+
# @return [String] human-readable representation of URI
|
24
|
+
def inspect
|
25
|
+
format("#<%s:%#0x URI:%s>", self.class, object_id, to_s)
|
26
|
+
end
|
22
27
|
end
|
23
28
|
end
|
data/lib/http/version.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
RSpec.describe HTTP::Request do
|
2
2
|
let(:proxy) { {} }
|
3
3
|
let(:headers) { {:accept => "text/html"} }
|
4
|
-
let(:request_uri) { "http://example.com/foo?bar=baz
|
4
|
+
let(:request_uri) { "http://example.com/foo?bar=baz" }
|
5
5
|
|
6
6
|
subject(:request) { HTTP::Request.new(:get, request_uri, headers, proxy) }
|
7
7
|
|
@@ -134,13 +134,38 @@ RSpec.describe HTTP::Request do
|
|
134
134
|
end
|
135
135
|
|
136
136
|
describe "#headline" do
|
137
|
-
subject { request.headline }
|
137
|
+
subject(:headline) { request.headline }
|
138
138
|
|
139
|
-
it { is_expected.to eq "GET /foo?bar=baz
|
139
|
+
it { is_expected.to eq "GET /foo?bar=baz HTTP/1.1" }
|
140
|
+
|
141
|
+
context "when URI contains encoded query" do
|
142
|
+
let(:encoded_query) { "t=1970-01-01T01%3A00%3A00%2B01%3A00" }
|
143
|
+
let(:request_uri) { "http://example.com/foo/?#{encoded_query}" }
|
144
|
+
|
145
|
+
it "does not unencodes query part" do
|
146
|
+
expect(headline).to eq "GET /foo/?#{encoded_query} HTTP/1.1"
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
context "when URI contains non-ASCII path" do
|
151
|
+
let(:request_uri) { "http://example.com/キョ" }
|
152
|
+
|
153
|
+
it "encodes non-ASCII path part" do
|
154
|
+
expect(headline).to eq "GET /%E3%82%AD%E3%83%A7 HTTP/1.1"
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
context "when URI contains fragment" do
|
159
|
+
let(:request_uri) { "http://example.com/foo#bar" }
|
160
|
+
|
161
|
+
it "omits fragment part" do
|
162
|
+
expect(headline).to eq "GET /foo HTTP/1.1"
|
163
|
+
end
|
164
|
+
end
|
140
165
|
|
141
166
|
context "with proxy" do
|
142
167
|
let(:proxy) { {:user => "user", :pass => "pass"} }
|
143
|
-
it { is_expected.to eq "GET http://example.com/foo?bar=baz
|
168
|
+
it { is_expected.to eq "GET http://example.com/foo?bar=baz HTTP/1.1" }
|
144
169
|
end
|
145
170
|
end
|
146
171
|
end
|
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: 0.9.
|
4
|
+
version: 0.9.3
|
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: 2015-08-
|
14
|
+
date: 2015-08-19 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: http_parser.rb
|
@@ -183,39 +183,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
183
183
|
version: '0'
|
184
184
|
requirements: []
|
185
185
|
rubyforge_project:
|
186
|
-
rubygems_version: 2.
|
186
|
+
rubygems_version: 2.2.3
|
187
187
|
signing_key:
|
188
188
|
specification_version: 4
|
189
189
|
summary: HTTP should be easy
|
190
|
-
test_files:
|
191
|
-
- spec/lib/http/client_spec.rb
|
192
|
-
- spec/lib/http/content_type_spec.rb
|
193
|
-
- spec/lib/http/headers/mixin_spec.rb
|
194
|
-
- spec/lib/http/headers_spec.rb
|
195
|
-
- spec/lib/http/options/body_spec.rb
|
196
|
-
- spec/lib/http/options/form_spec.rb
|
197
|
-
- spec/lib/http/options/headers_spec.rb
|
198
|
-
- spec/lib/http/options/json_spec.rb
|
199
|
-
- spec/lib/http/options/merge_spec.rb
|
200
|
-
- spec/lib/http/options/new_spec.rb
|
201
|
-
- spec/lib/http/options/proxy_spec.rb
|
202
|
-
- spec/lib/http/options_spec.rb
|
203
|
-
- spec/lib/http/redirector_spec.rb
|
204
|
-
- spec/lib/http/request/writer_spec.rb
|
205
|
-
- spec/lib/http/request_spec.rb
|
206
|
-
- spec/lib/http/response/body_spec.rb
|
207
|
-
- spec/lib/http/response/status_spec.rb
|
208
|
-
- spec/lib/http/response_spec.rb
|
209
|
-
- spec/lib/http_spec.rb
|
210
|
-
- spec/spec_helper.rb
|
211
|
-
- spec/support/black_hole.rb
|
212
|
-
- spec/support/capture_warning.rb
|
213
|
-
- spec/support/connection_reuse_shared.rb
|
214
|
-
- spec/support/dummy_server.rb
|
215
|
-
- spec/support/dummy_server/servlet.rb
|
216
|
-
- spec/support/http_handling_shared.rb
|
217
|
-
- spec/support/proxy_server.rb
|
218
|
-
- spec/support/servers/config.rb
|
219
|
-
- spec/support/servers/runner.rb
|
220
|
-
- spec/support/ssl_helper.rb
|
190
|
+
test_files: []
|
221
191
|
has_rdoc:
|