aitch 0.5.0 → 1.0.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/.travis.yml +3 -5
- data/CHANGELOG.md +38 -0
- data/README.md +50 -14
- data/Rakefile +10 -0
- data/aitch.gemspec +4 -2
- data/lib/aitch.rb +7 -2
- data/lib/aitch/configuration.rb +1 -12
- data/lib/aitch/dsl.rb +1 -0
- data/lib/aitch/errors.rb +1 -0
- data/lib/aitch/ext/to_query.rb +1 -0
- data/lib/aitch/location.rb +3 -2
- data/lib/aitch/namespace.rb +1 -0
- data/lib/aitch/redirect.rb +8 -2
- data/lib/aitch/request.rb +22 -9
- data/lib/aitch/response.rb +4 -13
- data/lib/aitch/response/body.rb +1 -0
- data/lib/aitch/response/description.rb +52 -51
- data/lib/aitch/response/errors.rb +1 -0
- data/lib/aitch/response_parser.rb +29 -0
- data/lib/aitch/response_parser/default_parser.rb +18 -0
- data/lib/aitch/response_parser/html_parser.rb +18 -0
- data/lib/aitch/response_parser/json_parser.rb +18 -0
- data/lib/aitch/response_parser/xml_parser.rb +18 -0
- data/lib/aitch/uri.rb +1 -0
- data/lib/aitch/utils.rb +1 -0
- data/lib/aitch/version.rb +2 -1
- data/test/aitch/aitch_test.rb +27 -0
- data/test/aitch/configuration_test.rb +29 -0
- data/test/aitch/dsl_test.rb +48 -0
- data/test/aitch/execute_test.rb +45 -0
- data/test/aitch/namespace_test.rb +12 -0
- data/test/aitch/request/client_https_test.rb +20 -0
- data/test/aitch/request/follow_redirect_test.rb +64 -0
- data/test/aitch/request/request_class_test.rb +28 -0
- data/test/aitch/request/status_code_validation_test.rb +19 -0
- data/test/aitch/request_test.rb +138 -0
- data/test/aitch/response/custom_response_parser_test.rb +31 -0
- data/test/aitch/response/errors_test.rb +16 -0
- data/test/aitch/response/html_response_test.rb +18 -0
- data/test/aitch/response/json_response_test.rb +18 -0
- data/test/aitch/response/raw_response_test.rb +11 -0
- data/test/aitch/response/status_3xx_test.rb +56 -0
- data/test/aitch/response/status_4xx_test.rb +18 -0
- data/test/aitch/response/status_5xx_test.rb +18 -0
- data/test/aitch/response/xml_response_test.rb +18 -0
- data/test/aitch/response_parser/html_parser_test.rb +9 -0
- data/test/aitch/response_parser/json_parser_test.rb +9 -0
- data/test/aitch/response_parser/xml_parser_test.rb +17 -0
- data/test/aitch/response_test.rb +114 -0
- data/test/aitch/uri_test.rb +37 -0
- data/test/aitch/utils/symbolize_keys_test.rb +9 -0
- data/test/aitch/utils/underscore_test.rb +12 -0
- data/{spec → test}/fixtures/iso8859-1.xml +0 -0
- data/{spec/support/request_uri.rb → test/support/helpers.rb} +12 -3
- data/test/test_helper.rb +15 -0
- metadata +70 -37
- data/.rspec +0 -1
- data/lib/aitch/html_parser.rb +0 -7
- data/lib/aitch/xml_parser.rb +0 -7
- data/spec/aitch/aitch_spec.rb +0 -71
- data/spec/aitch/configuration_spec.rb +0 -33
- data/spec/aitch/dsl_spec.rb +0 -47
- data/spec/aitch/html_parser_spec.rb +0 -8
- data/spec/aitch/namespace_spec.rb +0 -11
- data/spec/aitch/request_spec.rb +0 -261
- data/spec/aitch/response_spec.rb +0 -259
- data/spec/aitch/uri_spec.rb +0 -36
- data/spec/aitch/utils_spec.rb +0 -19
- data/spec/aitch/xml_parser_spec.rb +0 -16
- data/spec/spec_helper.rb +0 -24
- data/spec/support/webmock.rb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: daca7104634e48ff40f0d33174c701884d0cbab4
|
4
|
+
data.tar.gz: 7d96817bec549c8764561efc84553859b6b6e29b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a2c8b42241ec8b9af83c2452c0b2f7fe5c92be1254d91b1324afa39eb7643283ecb3c0f8125834baedbf13e04ad4ffd8a4adadccd235a59318a35c273ee511d0
|
7
|
+
data.tar.gz: 7e7d759d48479efe4fb335a8a7ff1fd05434b34cb247f3b725bd6067391d8f05969fc8efd1b2fad976f1f1aeb385a74b37c943f4af167f3fa0987b76624d92ad
|
data/.travis.yml
CHANGED
@@ -1,23 +1,21 @@
|
|
1
1
|
language: ruby
|
2
|
-
script: "bundle exec
|
2
|
+
script: "bundle exec rake"
|
3
3
|
before_install: gem install bundler
|
4
4
|
cache: bundler
|
5
5
|
sudo: false
|
6
6
|
|
7
7
|
rvm:
|
8
|
+
- "2.3.0"
|
8
9
|
- "2.2"
|
9
10
|
- "2.1"
|
10
11
|
- "2.0"
|
11
|
-
- "1.9"
|
12
|
-
- jruby-19mode
|
13
12
|
- jruby-head
|
14
13
|
|
15
14
|
gemfile:
|
16
15
|
- Gemfile
|
17
16
|
|
18
17
|
notifications:
|
19
|
-
email:
|
20
|
-
- fnando.vieira@gmail.com
|
18
|
+
email: false
|
21
19
|
|
22
20
|
addons:
|
23
21
|
code_climate:
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
* **1.0.0**
|
4
|
+
* Use frozen string magic comments
|
5
|
+
* 307 redirections will honor the HTTP request method
|
6
|
+
* Fix issue with redirection; it was including the target url for one level redirection.
|
7
|
+
* Methods `Aitch::Response#html`, `Aitch::Response#json`, `Aitch::Response#xml` were removed; use `Aitch::Response#data` instead.
|
8
|
+
* Add support to response parsers
|
9
|
+
* **0.5.0** - May 24, 2015
|
10
|
+
* Remove hard dependency on ActiveSupport
|
11
|
+
* Add response validation
|
12
|
+
* **0.4.1** - December 20, 2014
|
13
|
+
* Consider default headers when returning content type (fixes issue with body's JSON encoding)
|
14
|
+
* **0.4.0** - December 18, 2014
|
15
|
+
* Add accessor method for setting request's content type
|
16
|
+
* Automatically encodes body as JSON when content type matches `json`
|
17
|
+
* JSON encoding now uses a parser
|
18
|
+
* **0.3.0** - April 28, 2014
|
19
|
+
* Make list of redirections available
|
20
|
+
* Make the request URL available on responses
|
21
|
+
* **0.2.1** - July 30, 2013
|
22
|
+
* Add alias for `response.success?` (`response.ok?`)
|
23
|
+
* **0.2.0** - July 28, 2013
|
24
|
+
* Add DSL support
|
25
|
+
* Create aliases for `response.data` (`response.xml` and `response.json`)
|
26
|
+
* **0.1.5** - June 26, 2013
|
27
|
+
* Fix issue with jRuby and `to_h` protocol
|
28
|
+
* **0.1.4** - June 13, 2013
|
29
|
+
* Accept headers as callable objects
|
30
|
+
* Fix XML encoding, always converting values to UTF-8
|
31
|
+
* **0.1.3** - May 12, 2013
|
32
|
+
* Add response HTML parsing into Nokogiri object
|
33
|
+
* **0.1.2** - May 10, 2013
|
34
|
+
* Add response error code helpers, like `response.bad_request?` and `response.not_found?`
|
35
|
+
* **0.1.1** - April 30, 2013
|
36
|
+
* Add support for namespaces
|
37
|
+
* **0.1.0** - April 29, 2013
|
38
|
+
* Initial release
|
data/README.md
CHANGED
@@ -54,15 +54,6 @@ Aitch.configure do |config|
|
|
54
54
|
|
55
55
|
# Set the logger.
|
56
56
|
config.logger = nil
|
57
|
-
|
58
|
-
# Set the JSON parser.
|
59
|
-
config.json_parser = JSON
|
60
|
-
|
61
|
-
# Set the XML parser.
|
62
|
-
config.xml_parser = Aitch::XMLParser
|
63
|
-
|
64
|
-
# Set the HTML parser.
|
65
|
-
config.html_parser = Aitch::HTMLParser
|
66
57
|
end
|
67
58
|
```
|
68
59
|
|
@@ -108,10 +99,7 @@ response.redirect? # status 3xx
|
|
108
99
|
response.error? # status 4xx or 5xx
|
109
100
|
response.error # response error
|
110
101
|
response.body # returned body
|
111
|
-
response.data #
|
112
|
-
response.xml # An alias to the Aitch::Response#data method
|
113
|
-
response.html # An alias to the Aitch::Response#data method
|
114
|
-
response.json # An alias to the Aitch::Response#data method
|
102
|
+
response.data # Parsed response body
|
115
103
|
```
|
116
104
|
|
117
105
|
#### Parsing JSON, XML and HTML with Nokogiri
|
@@ -208,7 +196,7 @@ Request.get("http://example.org")
|
|
208
196
|
|
209
197
|
### Validating responses
|
210
198
|
|
211
|
-
When you know
|
199
|
+
When you know the kind of response you're expecting, you can validate it by specifying the `expect` option.
|
212
200
|
|
213
201
|
```ruby
|
214
202
|
Aitch.get do
|
@@ -225,6 +213,54 @@ Expect(200 OK) <=> Actual(404 Not Found)
|
|
225
213
|
|
226
214
|
You can also provide a list of accepted statuses, like `expect: [200, 201]`.
|
227
215
|
|
216
|
+
### Response Parsers
|
217
|
+
|
218
|
+
You can register new response parsers by using `Aitch::ResponseParser.register(name, parser)`, where parser must implement the methods `match?(content_type)` and `load(response_body)`. This is how you could load CSV values.
|
219
|
+
|
220
|
+
```ruby
|
221
|
+
require "csv"
|
222
|
+
|
223
|
+
module CSVParser
|
224
|
+
def self.type
|
225
|
+
:csv
|
226
|
+
end
|
227
|
+
|
228
|
+
def self.match?(content_type)
|
229
|
+
content_type.to_s =~ /csv/
|
230
|
+
end
|
231
|
+
|
232
|
+
def self.load(source)
|
233
|
+
CSV.parse(source.to_s)
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
Aitch::ResponseParser.prepend(:csv, CSVParser)
|
238
|
+
```
|
239
|
+
|
240
|
+
The default behavior is returning the response body. You can replace it as the following:
|
241
|
+
|
242
|
+
```ruby
|
243
|
+
module DefaultParser
|
244
|
+
def self.type
|
245
|
+
:default
|
246
|
+
end
|
247
|
+
|
248
|
+
def self.match?(content_type)
|
249
|
+
true
|
250
|
+
end
|
251
|
+
|
252
|
+
def self.load(source)
|
253
|
+
source.to_s
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
257
|
+
# You should use append here, to ensure
|
258
|
+
# that is that last parser on the list.
|
259
|
+
Aitch::ResponseParser.append(:default, DefaultParser)
|
260
|
+
```
|
261
|
+
|
262
|
+
Aitch comes with response parsers for HTML, XML and JSON.
|
263
|
+
|
228
264
|
## Contributing
|
229
265
|
|
230
266
|
1. Fork it
|
data/Rakefile
CHANGED
data/aitch.gemspec
CHANGED
@@ -15,12 +15,14 @@ Gem::Specification.new do |spec|
|
|
15
15
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
16
16
|
spec.require_paths = ["lib"]
|
17
17
|
|
18
|
+
spec.required_ruby_version = ">= 2.0"
|
19
|
+
|
18
20
|
spec.add_dependency "nokogiri", ">= 1.6.0"
|
19
21
|
|
20
22
|
spec.add_development_dependency "codeclimate-test-reporter"
|
21
23
|
spec.add_development_dependency "bundler"
|
22
24
|
spec.add_development_dependency "rake"
|
23
|
-
spec.add_development_dependency "
|
24
|
-
spec.add_development_dependency "
|
25
|
+
spec.add_development_dependency "minitest-utils"
|
26
|
+
spec.add_development_dependency "mocha"
|
25
27
|
spec.add_development_dependency "webmock"
|
26
28
|
end
|
data/lib/aitch.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require "net/https"
|
2
3
|
require "forwardable"
|
3
4
|
require "json"
|
@@ -24,8 +25,11 @@ require "aitch/response/errors"
|
|
24
25
|
require "aitch/response"
|
25
26
|
require "aitch/response/body"
|
26
27
|
require "aitch/response/description"
|
27
|
-
require "aitch/
|
28
|
-
require "aitch/html_parser"
|
28
|
+
require "aitch/response_parser/default_parser"
|
29
|
+
require "aitch/response_parser/html_parser"
|
30
|
+
require "aitch/response_parser/json_parser"
|
31
|
+
require "aitch/response_parser/xml_parser"
|
32
|
+
require "aitch/response_parser"
|
29
33
|
require "aitch/version"
|
30
34
|
|
31
35
|
module Aitch
|
@@ -47,6 +51,7 @@ module Aitch
|
|
47
51
|
end
|
48
52
|
|
49
53
|
private
|
54
|
+
|
50
55
|
def self.namespace
|
51
56
|
@namespace ||= Namespace.new
|
52
57
|
end
|
data/lib/aitch/configuration.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Aitch
|
2
3
|
class Configuration
|
3
4
|
# Set proxy.
|
@@ -21,24 +22,12 @@ module Aitch
|
|
21
22
|
# Set the logger.
|
22
23
|
attr_accessor :logger
|
23
24
|
|
24
|
-
# Set the JSON parser.
|
25
|
-
attr_accessor :json_parser
|
26
|
-
|
27
|
-
# Set the XML parser.
|
28
|
-
attr_accessor :xml_parser
|
29
|
-
|
30
|
-
# Set the HTML parser.
|
31
|
-
attr_accessor :html_parser
|
32
|
-
|
33
25
|
def initialize
|
34
26
|
@timeout = 10
|
35
27
|
@redirect_limit = 5
|
36
28
|
@follow_redirect = true
|
37
29
|
@user_agent = "Aitch/#{Aitch::VERSION} (http://rubygems.org/gems/aitch)"
|
38
30
|
@default_headers = {}
|
39
|
-
@json_parser = JSON
|
40
|
-
@xml_parser = XMLParser
|
41
|
-
@html_parser = HTMLParser
|
42
31
|
end
|
43
32
|
|
44
33
|
def to_h
|
data/lib/aitch/dsl.rb
CHANGED
data/lib/aitch/errors.rb
CHANGED
data/lib/aitch/ext/to_query.rb
CHANGED
data/lib/aitch/location.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Aitch
|
2
3
|
class Location
|
3
4
|
attr_reader :redirect_stack, :current_url
|
@@ -11,10 +12,10 @@ module Aitch
|
|
11
12
|
return current_url unless current_url.match(%r[\A/])
|
12
13
|
|
13
14
|
uri = find_uri_with_host
|
14
|
-
url = "#{uri.scheme}://#{uri.hostname}"
|
15
|
+
url = ["#{uri.scheme}://#{uri.hostname}"]
|
15
16
|
url << ":#{uri.port}" unless [80, 443].include?(uri.port)
|
16
17
|
url << current_url
|
17
|
-
url
|
18
|
+
url.join
|
18
19
|
end
|
19
20
|
|
20
21
|
def find_uri_with_host
|
data/lib/aitch/namespace.rb
CHANGED
data/lib/aitch/redirect.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Aitch
|
2
3
|
class Redirect
|
4
|
+
attr_reader :tries
|
5
|
+
|
3
6
|
def initialize(options)
|
4
7
|
@tries = 1
|
5
8
|
@options = options
|
6
|
-
@max_tries = @options[:redirect_limit]
|
7
9
|
end
|
8
10
|
|
9
11
|
def followed!
|
@@ -11,7 +13,11 @@ module Aitch
|
|
11
13
|
end
|
12
14
|
|
13
15
|
def follow?(response)
|
14
|
-
enabled? && response.redirect? &&
|
16
|
+
enabled? && response.redirect? && tries < max_tries
|
17
|
+
end
|
18
|
+
|
19
|
+
def max_tries
|
20
|
+
@options[:redirect_limit]
|
15
21
|
end
|
16
22
|
|
17
23
|
def enabled?
|
data/lib/aitch/request.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Aitch
|
2
3
|
class Request
|
3
4
|
attr_accessor :request_method
|
@@ -5,10 +6,14 @@ module Aitch
|
|
5
6
|
attr_accessor :data
|
6
7
|
attr_accessor :headers
|
7
8
|
attr_accessor :options
|
9
|
+
attr_accessor :redirects
|
8
10
|
|
9
11
|
def initialize(options)
|
10
|
-
self.headers
|
11
|
-
self.options
|
12
|
+
self.headers = {}
|
13
|
+
self.options = {}
|
14
|
+
self.redirects = []
|
15
|
+
|
16
|
+
@_original_options = options.dup.freeze
|
12
17
|
|
13
18
|
options.each do |name, value|
|
14
19
|
public_send("#{name}=", value)
|
@@ -26,11 +31,11 @@ module Aitch
|
|
26
31
|
end
|
27
32
|
|
28
33
|
def content_type=(content_type)
|
29
|
-
headers[
|
34
|
+
headers["Content-Type"] = content_type
|
30
35
|
end
|
31
36
|
|
32
37
|
def content_type
|
33
|
-
headers[
|
38
|
+
headers["Content-Type"] || options.fetch(:default_headers, {})["Content-Type"]
|
34
39
|
end
|
35
40
|
|
36
41
|
def request
|
@@ -114,14 +119,22 @@ module Aitch
|
|
114
119
|
defined?(Net::ReadTimeout) ? Net::ReadTimeout : Timeout::Error
|
115
120
|
end
|
116
121
|
|
117
|
-
def follow_redirect(response)
|
122
|
+
def follow_redirect(response, redirected_from = [])
|
123
|
+
return response unless response.redirect?
|
124
|
+
|
118
125
|
redirect = Redirect.new(options)
|
126
|
+
redirected_from = [url]
|
119
127
|
|
120
128
|
while redirect.follow?(response)
|
121
|
-
redirected_from
|
122
|
-
redirected_from << Location.new(redirected_from, response.location).location
|
129
|
+
location = Location.new(redirected_from, response.location).location
|
123
130
|
redirect.followed!
|
124
|
-
|
131
|
+
follow_request_method = response.code == 307 ? request_method : :get
|
132
|
+
follow_request_options = @_original_options.merge(
|
133
|
+
request_method: follow_request_method,
|
134
|
+
url: location
|
135
|
+
)
|
136
|
+
response = self.class.new(follow_request_options).perform
|
137
|
+
redirected_from += response.redirected_from
|
125
138
|
end
|
126
139
|
|
127
140
|
raise TooManyRedirectsError if redirect.enabled? && response.redirect?
|
@@ -138,7 +151,7 @@ module Aitch
|
|
138
151
|
|
139
152
|
descriptions = expected
|
140
153
|
.map {|code| Response.description_for_code(code) }
|
141
|
-
.join(
|
154
|
+
.join(", ")
|
142
155
|
|
143
156
|
raise StatusCodeError,
|
144
157
|
"Expected(#{descriptions}) <=> Actual(#{response.description})"
|
data/lib/aitch/response.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Aitch
|
2
3
|
class Response
|
3
4
|
extend Forwardable
|
@@ -6,12 +7,13 @@ module Aitch
|
|
6
7
|
attr_accessor :redirected_from, :url
|
7
8
|
|
8
9
|
def self.description_for_code(code)
|
9
|
-
[code, DESCRIPTION[code]].compact.join(
|
10
|
+
[code, DESCRIPTION[code]].compact.join(" ")
|
10
11
|
end
|
11
12
|
|
12
13
|
def initialize(options, http_response)
|
13
14
|
@options = options
|
14
15
|
@http_response = http_response
|
16
|
+
@redirected_from = options.fetch(:redirected_from, [])
|
15
17
|
end
|
16
18
|
|
17
19
|
ERRORS.each do |status_code, exception|
|
@@ -60,19 +62,8 @@ module Aitch
|
|
60
62
|
end
|
61
63
|
|
62
64
|
def data
|
63
|
-
|
64
|
-
@options[:json_parser].load(body)
|
65
|
-
elsif xml?
|
66
|
-
@options[:xml_parser].load(body)
|
67
|
-
elsif html?
|
68
|
-
@options[:html_parser].load(body)
|
69
|
-
else
|
70
|
-
body
|
71
|
-
end
|
65
|
+
Aitch::ResponseParser.find(content_type).load(body)
|
72
66
|
end
|
73
|
-
alias_method :xml, :data
|
74
|
-
alias_method :html, :data
|
75
|
-
alias_method :json, :data
|
76
67
|
|
77
68
|
def headers
|
78
69
|
@headers ||= {}.tap do |headers|
|
data/lib/aitch/response/body.rb
CHANGED
@@ -1,61 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Aitch
|
2
3
|
class Response
|
3
4
|
DESCRIPTION = {
|
4
|
-
100 =>
|
5
|
-
101 =>
|
5
|
+
100 => "Continue",
|
6
|
+
101 => "Switch Protocol",
|
6
7
|
|
7
|
-
200 =>
|
8
|
-
201 =>
|
9
|
-
202 =>
|
10
|
-
203 =>
|
11
|
-
204 =>
|
12
|
-
205 =>
|
13
|
-
206 =>
|
14
|
-
207 =>
|
15
|
-
226 =>
|
8
|
+
200 => "OK",
|
9
|
+
201 => "Created",
|
10
|
+
202 => "Accepted",
|
11
|
+
203 => "Non Authoritative Information",
|
12
|
+
204 => "No Content",
|
13
|
+
205 => "Reset Content",
|
14
|
+
206 => "Partial Content",
|
15
|
+
207 => "Multi Status",
|
16
|
+
226 => "IM Used",
|
16
17
|
|
17
|
-
300 =>
|
18
|
-
301 =>
|
19
|
-
302 =>
|
20
|
-
303 =>
|
21
|
-
304 =>
|
22
|
-
305 =>
|
23
|
-
307 =>
|
18
|
+
300 => "Multiple Choices",
|
19
|
+
301 => "Moved Permanently",
|
20
|
+
302 => "Found",
|
21
|
+
303 => "See Other",
|
22
|
+
304 => "Not Modified",
|
23
|
+
305 => "Use Proxy",
|
24
|
+
307 => "Temporary Redirect",
|
24
25
|
|
25
|
-
400 =>
|
26
|
-
401 =>
|
27
|
-
402 =>
|
28
|
-
403 =>
|
29
|
-
404 =>
|
30
|
-
405 =>
|
31
|
-
406 =>
|
32
|
-
407 =>
|
33
|
-
408 =>
|
34
|
-
409 =>
|
35
|
-
410 =>
|
36
|
-
411 =>
|
37
|
-
412 =>
|
38
|
-
413 =>
|
39
|
-
414 =>
|
40
|
-
415 =>
|
41
|
-
416 =>
|
42
|
-
417 =>
|
43
|
-
422 =>
|
44
|
-
423 =>
|
45
|
-
424 =>
|
46
|
-
426 =>
|
47
|
-
428 =>
|
48
|
-
429 =>
|
49
|
-
431 =>
|
26
|
+
400 => "Bad Request",
|
27
|
+
401 => "Unauthorized",
|
28
|
+
402 => "Payment Required",
|
29
|
+
403 => "Forbidden",
|
30
|
+
404 => "Not Found",
|
31
|
+
405 => "Method Not Allowed",
|
32
|
+
406 => "Not Acceptable",
|
33
|
+
407 => "Proxy Authentication Required",
|
34
|
+
408 => "Request Time Out",
|
35
|
+
409 => "Conflict",
|
36
|
+
410 => "Gone",
|
37
|
+
411 => "Length Required",
|
38
|
+
412 => "Precondition Failed",
|
39
|
+
413 => "Request Entity Too Large",
|
40
|
+
414 => "Request URIToo Long",
|
41
|
+
415 => "Unsupported Media Type",
|
42
|
+
416 => "Requested Range Not Satisfiable",
|
43
|
+
417 => "Expectation Failed",
|
44
|
+
422 => "Unprocessable Entity",
|
45
|
+
423 => "Locked",
|
46
|
+
424 => "Failed Dependency",
|
47
|
+
426 => "Upgrade Required",
|
48
|
+
428 => "Precondition Required",
|
49
|
+
429 => "Too Many Requests",
|
50
|
+
431 => "Request Header Fields Too Large",
|
50
51
|
|
51
|
-
500 =>
|
52
|
-
501 =>
|
53
|
-
502 =>
|
54
|
-
503 =>
|
55
|
-
504 =>
|
56
|
-
505 =>
|
57
|
-
507 =>
|
58
|
-
511 =>
|
52
|
+
500 => "Internal Server Error",
|
53
|
+
501 => "Not Implemented",
|
54
|
+
502 => "Bad Gateway",
|
55
|
+
503 => "Service Unavailable",
|
56
|
+
504 => "Gateway Time Out",
|
57
|
+
505 => "Version Not Supported",
|
58
|
+
507 => "Insufficient Storage",
|
59
|
+
511 => "Network Authentication Required",
|
59
60
|
}
|
60
61
|
end
|
61
62
|
end
|