rbs 3.0.0.dev.2 → 3.0.0.dev.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/.github/workflows/comments.yml +2 -1
- data/.github/workflows/ruby.yml +4 -0
- data/Gemfile.lock +11 -11
- data/Rakefile +2 -2
- data/Steepfile +1 -1
- data/core/array.rbs +573 -423
- data/core/basic_object.rbs +11 -39
- data/core/binding.rbs +1 -1
- data/core/builtin.rbs +8 -0
- data/core/class.rbs +37 -0
- data/core/comparable.rbs +7 -18
- data/core/complex.rbs +2 -2
- data/core/data.rbs +419 -0
- data/core/dir.rbs +52 -104
- data/core/encoding.rbs +22 -181
- data/core/enumerable.rbs +212 -175
- data/core/enumerator/product.rbs +96 -0
- data/core/enumerator.rbs +57 -8
- data/core/errors.rbs +8 -2
- data/core/exception.rbs +41 -0
- data/core/fiber.rbs +95 -12
- data/core/file.rbs +840 -275
- data/core/file_test.rbs +34 -19
- data/core/float.rbs +40 -96
- data/core/gc.rbs +15 -3
- data/core/hash.rbs +113 -175
- data/core/integer.rbs +85 -145
- data/core/io/buffer.rbs +187 -60
- data/core/io/wait.rbs +28 -16
- data/core/io.rbs +1859 -1389
- data/core/kernel.rbs +525 -961
- data/core/match_data.rbs +306 -142
- data/core/math.rbs +506 -234
- data/core/method.rbs +0 -24
- data/core/module.rbs +110 -17
- data/core/nil_class.rbs +2 -0
- data/core/numeric.rbs +76 -144
- data/core/object.rbs +88 -212
- data/core/proc.rbs +17 -5
- data/core/process.rbs +22 -5
- data/core/ractor.rbs +1 -1
- data/core/random.rbs +20 -3
- data/core/range.rbs +91 -89
- data/core/rational.rbs +2 -3
- data/core/rbs/unnamed/argf.rbs +177 -120
- data/core/rbs/unnamed/env_class.rbs +89 -163
- data/core/rbs/unnamed/random.rbs +36 -12
- data/core/refinement.rbs +8 -0
- data/core/regexp.rbs +462 -272
- data/core/ruby_vm.rbs +210 -0
- data/{stdlib/set/0 → core}/set.rbs +43 -47
- data/core/string.rbs +1403 -1332
- data/core/string_io.rbs +191 -107
- data/core/struct.rbs +67 -63
- data/core/symbol.rbs +187 -201
- data/core/thread.rbs +40 -35
- data/core/time.rbs +902 -826
- data/core/trace_point.rbs +55 -6
- data/core/unbound_method.rbs +48 -24
- data/docs/collection.md +4 -0
- data/docs/syntax.md +55 -0
- data/ext/rbs_extension/parser.c +5 -6
- data/lib/rbs/cli.rb +6 -1
- data/lib/rbs/collection/cleaner.rb +8 -1
- data/lib/rbs/collection/config/lockfile.rb +3 -1
- data/lib/rbs/collection/config/lockfile_generator.rb +16 -14
- data/lib/rbs/collection/config.rb +1 -1
- data/lib/rbs/collection/sources/git.rb +9 -2
- data/lib/rbs/collection/sources/local.rb +79 -0
- data/lib/rbs/collection/sources.rb +8 -1
- data/lib/rbs/environment.rb +6 -5
- data/lib/rbs/environment_loader.rb +3 -2
- data/lib/rbs/errors.rb +18 -0
- data/lib/rbs/locator.rb +26 -7
- data/lib/rbs/sorter.rb +2 -2
- data/lib/rbs/version.rb +1 -1
- data/sig/collection/sources.rbs +32 -3
- data/sig/environment.rbs +2 -3
- data/sig/locator.rbs +14 -2
- data/sig/shims/{abstract_syntax_tree.rbs → _abstract_syntax_tree.rbs} +0 -0
- data/stdlib/bigdecimal/0/big_decimal.rbs +16 -13
- data/stdlib/cgi/0/core.rbs +16 -0
- data/stdlib/coverage/0/coverage.rbs +50 -8
- data/stdlib/csv/0/csv.rbs +1 -1
- data/stdlib/date/0/date.rbs +856 -726
- data/stdlib/date/0/date_time.rbs +83 -210
- data/stdlib/erb/0/erb.rbs +13 -36
- data/stdlib/etc/0/etc.rbs +127 -20
- data/stdlib/fileutils/0/fileutils.rbs +1290 -381
- data/stdlib/logger/0/logger.rbs +466 -316
- data/stdlib/net-http/0/net-http.rbs +2211 -534
- data/stdlib/nkf/0/nkf.rbs +5 -5
- data/stdlib/objspace/0/objspace.rbs +31 -14
- data/stdlib/openssl/0/openssl.rbs +11 -7
- data/stdlib/optparse/0/optparse.rbs +20 -17
- data/stdlib/pathname/0/pathname.rbs +21 -4
- data/stdlib/pstore/0/pstore.rbs +378 -154
- data/stdlib/pty/0/pty.rbs +24 -8
- data/stdlib/ripper/0/ripper.rbs +1650 -0
- data/stdlib/socket/0/addrinfo.rbs +9 -15
- data/stdlib/socket/0/socket.rbs +36 -3
- data/stdlib/strscan/0/string_scanner.rbs +7 -5
- data/stdlib/tempfile/0/tempfile.rbs +104 -44
- data/stdlib/time/0/time.rbs +2 -2
- data/stdlib/uri/0/file.rbs +5 -0
- data/stdlib/uri/0/generic.rbs +2 -2
- data/stdlib/yaml/0/yaml.rbs +2 -2
- data/stdlib/zlib/0/zlib.rbs +1 -1
- metadata +8 -6
- data/core/deprecated.rbs +0 -9
- data/sig/shims/ripper.rbs +0 -8
@@ -55,107 +55,283 @@ module Net
|
|
55
55
|
end
|
56
56
|
|
57
57
|
# <!-- rdoc-file=lib/net/http.rb -->
|
58
|
-
#
|
58
|
+
# Class Net::HTTP provides a rich library that implements the client in a
|
59
|
+
# client-server model that uses the HTTP request-response protocol. For
|
60
|
+
# information about HTTP, see
|
61
|
+
#
|
62
|
+
# * [Hypertext Transfer
|
63
|
+
# Protocol](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol).
|
64
|
+
# * [Technical
|
65
|
+
# overview](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Techni
|
66
|
+
# cal_overview).
|
67
|
+
#
|
68
|
+
#
|
69
|
+
# Note: If you are performing only a few GET requests, consider using
|
70
|
+
# [OpenURI](rdoc-ref:OpenURI); otherwise, read on.
|
71
|
+
#
|
72
|
+
# ## Synopsis
|
73
|
+
#
|
74
|
+
# If you are already familiar with HTTP, this synopsis may be helpful.
|
75
|
+
#
|
76
|
+
# [Session](rdoc-ref:Net::HTTP@Sessions) with multiple requests for [HTTP
|
77
|
+
# methods](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_met
|
78
|
+
# hods):
|
79
|
+
#
|
80
|
+
# Net::HTTP.start(hostname) do |http|
|
81
|
+
# # Session started automatically before block execution.
|
82
|
+
# http.get(path_or_uri, headers = {})
|
83
|
+
# http.head(path_or_uri, headers = {})
|
84
|
+
# http.post(path_or_uri, data, headers = {}) # Can also have a block.
|
85
|
+
# http.put(path_or_uri, data, headers = {})
|
86
|
+
# http.delete(path_or_uri, headers = {Depth: 'Infinity'})
|
87
|
+
# http.options(path_or_uri, headers = {})
|
88
|
+
# http.trace(path_or_uri, headers = {})
|
89
|
+
# http.patch(path_or_uri, data, headers = {}) # Can also have a block.
|
90
|
+
# # Session finished automatically at block exit.
|
91
|
+
# end
|
92
|
+
#
|
93
|
+
# [Session](rdoc-ref:Net::HTTP@Sessions) with multiple requests for [WebDAV
|
94
|
+
# methods](https://en.wikipedia.org/wiki/WebDAV#Implementation):
|
95
|
+
#
|
96
|
+
# Net::HTTP.start(hostname) do |http|
|
97
|
+
# # Session started automatically before block execution.
|
98
|
+
# http.copy(path_or_uri, headers = {})
|
99
|
+
# http.lock(path_or_uri, body, headers = {})
|
100
|
+
# http.mkcol(path_or_uri, body = nil, headers = {})
|
101
|
+
# http.move(path_or_uri, headers = {})
|
102
|
+
# http.propfind(path_or_uri, body = nil, headers = {'Depth' => '0'})
|
103
|
+
# http.proppatch(path_or_uri, body, headers = {})
|
104
|
+
# http.unlock(path_or_uri, body, headers = {})
|
105
|
+
# # Session finished automatically at block exit.
|
106
|
+
# end
|
107
|
+
#
|
108
|
+
# Each of the following methods automatically starts and finishes a
|
109
|
+
# [session](rdoc-ref:Net::HTTP@Sessions) that sends a single request:
|
59
110
|
#
|
60
|
-
#
|
61
|
-
#
|
62
|
-
#
|
111
|
+
# # Return string response body.
|
112
|
+
# Net::HTTP.get(hostname, path, port = 80)
|
113
|
+
# Net::HTTP.get(uri, headers = {}, port = 80)
|
63
114
|
#
|
64
|
-
#
|
65
|
-
#
|
115
|
+
# # Write string response body to $stdout.
|
116
|
+
# Net::HTTP.get_print(hostname, path_or_uri, port = 80)
|
117
|
+
# Net::HTTP.get_print(uri, headers = {}, port = 80)
|
66
118
|
#
|
67
|
-
#
|
119
|
+
# # Return response as Net::HTTPResponse object.
|
120
|
+
# Net::HTTP.get_response(hostname, path_or_uri, port = 80)
|
121
|
+
# Net::HTTP.get_response(uri, headers = {}, port = 80)
|
68
122
|
#
|
69
|
-
#
|
123
|
+
# Net::HTTP.post(uri, data, headers = {})
|
124
|
+
# Net::HTTP.post_form(uri, params)
|
70
125
|
#
|
71
|
-
#
|
126
|
+
# ## About the Examples
|
127
|
+
#
|
128
|
+
# Examples here assume that `net/http` has been required (which also requires
|
129
|
+
# `uri`):
|
72
130
|
#
|
73
131
|
# require 'net/http'
|
74
132
|
#
|
75
|
-
#
|
133
|
+
# Many code examples here use these example websites:
|
76
134
|
#
|
77
|
-
#
|
78
|
-
#
|
135
|
+
# * https://jsonplaceholder.typicode.com.
|
136
|
+
# * http://example.com.
|
79
137
|
#
|
80
|
-
# ### GET
|
81
138
|
#
|
82
|
-
#
|
139
|
+
# Some examples also assume these variables:
|
83
140
|
#
|
84
|
-
#
|
141
|
+
# uri = URI('https://jsonplaceholder.typicode.com')
|
142
|
+
# uri.freeze # Examples may not modify.
|
143
|
+
# hostname = uri.hostname # => "jsonplaceholder.typicode.com"
|
144
|
+
# port = uri.port # => 443
|
85
145
|
#
|
86
|
-
#
|
87
|
-
# Net::HTTP.get(uri) # => String
|
146
|
+
# So that example requests may be written as:
|
88
147
|
#
|
89
|
-
#
|
148
|
+
# Net::HTTP.get(uri)
|
149
|
+
# Net::HTTP.get(hostname, '/index.html')
|
150
|
+
# Net::HTTP.start(hostname) do |http|
|
151
|
+
# http.get('/todos/1')
|
152
|
+
# http.get('/todos/2')
|
153
|
+
# end
|
90
154
|
#
|
91
|
-
#
|
92
|
-
#
|
93
|
-
# uri.query = URI.encode_www_form(params)
|
155
|
+
# An example that needs a modified URI first duplicates `uri`, then modifies the
|
156
|
+
# duplicate:
|
94
157
|
#
|
95
|
-
#
|
96
|
-
#
|
158
|
+
# _uri = uri.dup
|
159
|
+
# _uri.path = '/todos/1'
|
97
160
|
#
|
98
|
-
#
|
161
|
+
# ## URIs
|
99
162
|
#
|
100
|
-
#
|
101
|
-
#
|
102
|
-
#
|
163
|
+
# On the internet, a URI ([Universal Resource
|
164
|
+
# Identifier](https://en.wikipedia.org/wiki/Uniform_Resource_Identifier)) is a
|
165
|
+
# string that identifies a particular resource. It consists of some or all of:
|
166
|
+
# scheme, hostname, path, query, and fragment; see [URI
|
167
|
+
# syntax](https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#Syntax).
|
103
168
|
#
|
104
|
-
#
|
169
|
+
# A Ruby [URI::Generic](rdoc-ref:URI::Generic) object represents an internet
|
170
|
+
# URI. It provides, among others, methods `scheme`, `hostname`, `path`, `query`,
|
171
|
+
# and `fragment`.
|
105
172
|
#
|
106
|
-
#
|
107
|
-
# res = Net::HTTP.post_form(uri, 'q' => ['ruby', 'perl'], 'max' => '50')
|
108
|
-
# puts res.body
|
173
|
+
# ### Schemes
|
109
174
|
#
|
110
|
-
#
|
175
|
+
# An internet URI has a
|
176
|
+
# [scheme](https://en.wikipedia.org/wiki/List_of_URI_schemes).
|
111
177
|
#
|
112
|
-
# The
|
113
|
-
# which can perform a variety of request types using persistent connections.
|
178
|
+
# The two schemes supported in Net::HTTP are `'https'` and `'http'`:
|
114
179
|
#
|
115
|
-
# uri
|
180
|
+
# uri.scheme # => "https"
|
181
|
+
# URI('http://example.com').scheme # => "http"
|
116
182
|
#
|
117
|
-
#
|
118
|
-
# request = Net::HTTP::Get.new uri
|
183
|
+
# ### Hostnames
|
119
184
|
#
|
120
|
-
#
|
185
|
+
# A hostname identifies a server (host) to which requests may be sent:
|
186
|
+
#
|
187
|
+
# hostname = uri.hostname # => "jsonplaceholder.typicode.com"
|
188
|
+
# Net::HTTP.start(hostname) do |http|
|
189
|
+
# # Some HTTP stuff.
|
121
190
|
# end
|
122
191
|
#
|
123
|
-
#
|
124
|
-
# kept open for the duration of the block. The connection will remain open for
|
125
|
-
# multiple requests in the block if the server indicates it supports persistent
|
126
|
-
# connections.
|
192
|
+
# ### Paths
|
127
193
|
#
|
128
|
-
#
|
129
|
-
# automatically closing it you can use ::new and then call #start and #finish
|
130
|
-
# manually.
|
194
|
+
# A host-specific path identifies a resource on the host:
|
131
195
|
#
|
132
|
-
#
|
133
|
-
#
|
196
|
+
# _uri = uri.dup
|
197
|
+
# _uri.path = '/todos/1'
|
198
|
+
# hostname = _uri.hostname
|
199
|
+
# path = _uri.path
|
200
|
+
# Net::HTTP.get(hostname, path)
|
134
201
|
#
|
135
|
-
#
|
136
|
-
# supply either a String for the request path or a URI from which Net::HTTP will
|
137
|
-
# extract the request path.
|
202
|
+
# ### Queries
|
138
203
|
#
|
139
|
-
#
|
204
|
+
# A host-specific query adds name/value pairs to the URI:
|
140
205
|
#
|
141
|
-
#
|
142
|
-
#
|
206
|
+
# _uri = uri.dup
|
207
|
+
# params = {userId: 1, completed: false}
|
208
|
+
# _uri.query = URI.encode_www_form(params)
|
209
|
+
# _uri # => #<URI::HTTPS https://jsonplaceholder.typicode.com?userId=1&completed=false>
|
210
|
+
# Net::HTTP.get(_uri)
|
143
211
|
#
|
144
|
-
#
|
145
|
-
# res['Set-Cookie'] # => String
|
146
|
-
# res.get_fields('set-cookie') # => Array
|
147
|
-
# res.to_hash['set-cookie'] # => Array
|
148
|
-
# puts "Headers: #{res.to_hash.inspect}"
|
212
|
+
# ### Fragments
|
149
213
|
#
|
150
|
-
#
|
151
|
-
#
|
152
|
-
#
|
153
|
-
# puts res.class.name # => 'HTTPOK'
|
214
|
+
# A [URI fragment](https://en.wikipedia.org/wiki/URI_fragment) has no effect in
|
215
|
+
# Net::HTTP; the same data is returned, regardless of whether a fragment is
|
216
|
+
# included.
|
154
217
|
#
|
155
|
-
#
|
156
|
-
#
|
218
|
+
# ## Request Headers
|
219
|
+
#
|
220
|
+
# Request headers may be used to pass additional information to the host,
|
221
|
+
# similar to arguments passed in a method call; each header is a name/value
|
222
|
+
# pair.
|
223
|
+
#
|
224
|
+
# Each of the Net::HTTP methods that sends a request to the host has optional
|
225
|
+
# argument `headers`, where the headers are expressed as a hash of
|
226
|
+
# field-name/value pairs:
|
227
|
+
#
|
228
|
+
# headers = {Accept: 'application/json', Connection: 'Keep-Alive'}
|
229
|
+
# Net::HTTP.get(uri, headers)
|
230
|
+
#
|
231
|
+
# See lists of both standard request fields and common request fields at
|
232
|
+
# [Request
|
233
|
+
# Fields](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Request_field
|
234
|
+
# s). A host may also accept other custom fields.
|
235
|
+
#
|
236
|
+
# ## Sessions
|
237
|
+
#
|
238
|
+
# A *session* is a connection between a server (host) and a client that:
|
239
|
+
#
|
240
|
+
# * Is begun by instance method Net::HTTP#start.
|
241
|
+
# * May contain any number of requests.
|
242
|
+
# * Is ended by instance method Net::HTTP#finish.
|
243
|
+
#
|
244
|
+
#
|
245
|
+
# See example sessions at the [Synopsis](rdoc-ref:Net::HTTP@Synopsis).
|
246
|
+
#
|
247
|
+
# ### Session Using Net::HTTP.start
|
248
|
+
#
|
249
|
+
# If you have many requests to make to a single host (and port), consider using
|
250
|
+
# singleton method Net::HTTP.start with a block; the method handles the session
|
251
|
+
# automatically by:
|
252
|
+
#
|
253
|
+
# * Calling #start before block execution.
|
254
|
+
# * Executing the block.
|
255
|
+
# * Calling #finish after block execution.
|
256
|
+
#
|
257
|
+
#
|
258
|
+
# In the block, you can use these instance methods, each of which that sends a
|
259
|
+
# single request:
|
260
|
+
#
|
261
|
+
# * [HTTP
|
262
|
+
# methods](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request
|
263
|
+
# _methods):
|
264
|
+
#
|
265
|
+
# * #get, #request_get: GET.
|
266
|
+
# * #head, #request_head: HEAD.
|
267
|
+
# * #post, #request_post: POST.
|
268
|
+
# * #delete: DELETE.
|
269
|
+
# * #options: OPTIONS.
|
270
|
+
# * #trace: TRACE.
|
271
|
+
# * #patch: PATCH.
|
272
|
+
#
|
273
|
+
#
|
274
|
+
# * [WebDAV methods](https://en.wikipedia.org/wiki/WebDAV#Implementation):
|
157
275
|
#
|
158
|
-
#
|
276
|
+
# * #copy: COPY.
|
277
|
+
# * #lock: LOCK.
|
278
|
+
# * #mkcol: MKCOL.
|
279
|
+
# * #move: MOVE.
|
280
|
+
# * #propfind: PROPFIND.
|
281
|
+
# * #proppatch: PROPPATCH.
|
282
|
+
# * #unlock: UNLOCK.
|
283
|
+
#
|
284
|
+
#
|
285
|
+
#
|
286
|
+
# ### Session Using Net::HTTP.start and Net::HTTP.finish
|
287
|
+
#
|
288
|
+
# You can manage a session manually using methods #start and #finish:
|
289
|
+
#
|
290
|
+
# http = Net::HTTP.new(hostname)
|
291
|
+
# http.start
|
292
|
+
# http.get('/todos/1')
|
293
|
+
# http.get('/todos/2')
|
294
|
+
# http.delete('/posts/1')
|
295
|
+
# http.finish # Needed to free resources.
|
296
|
+
#
|
297
|
+
# ### Single-Request Session
|
298
|
+
#
|
299
|
+
# Certain convenience methods automatically handle a session by:
|
300
|
+
#
|
301
|
+
# * Creating an HTTP object
|
302
|
+
# * Starting a session.
|
303
|
+
# * Sending a single request.
|
304
|
+
# * Finishing the session.
|
305
|
+
# * Destroying the object.
|
306
|
+
#
|
307
|
+
#
|
308
|
+
# Such methods that send GET requests:
|
309
|
+
#
|
310
|
+
# * ::get: Returns the string response body.
|
311
|
+
# * ::get_print: Writes the string response body to $stdout.
|
312
|
+
# * ::get_response: Returns a Net::HTTPResponse object.
|
313
|
+
#
|
314
|
+
#
|
315
|
+
# Such methods that send POST requests:
|
316
|
+
#
|
317
|
+
# * ::post: Posts data to the host.
|
318
|
+
# * ::post_form: Posts form data to the host.
|
319
|
+
#
|
320
|
+
#
|
321
|
+
# ## HTTP Requests and Responses
|
322
|
+
#
|
323
|
+
# Many of the methods above are convenience methods, each of which sends a
|
324
|
+
# request and returns a string without directly using Net::HTTPRequest and
|
325
|
+
# Net::HTTPResponse objects.
|
326
|
+
#
|
327
|
+
# You can, however, directly create a request object, send the request, and
|
328
|
+
# retrieve the response object; see:
|
329
|
+
#
|
330
|
+
# * Net::HTTPRequest.
|
331
|
+
# * Net::HTTPResponse.
|
332
|
+
#
|
333
|
+
#
|
334
|
+
# ## Following Redirection
|
159
335
|
#
|
160
336
|
# Each Net::HTTPResponse object belongs to a class for its response code.
|
161
337
|
#
|
@@ -186,56 +362,7 @@ module Net
|
|
186
362
|
#
|
187
363
|
# print fetch('http://www.ruby-lang.org')
|
188
364
|
#
|
189
|
-
#
|
190
|
-
#
|
191
|
-
# A POST can be made using the Net::HTTP::Post request class. This example
|
192
|
-
# creates a URL encoded POST body:
|
193
|
-
#
|
194
|
-
# uri = URI('http://www.example.com/todo.cgi')
|
195
|
-
# req = Net::HTTP::Post.new(uri)
|
196
|
-
# req.set_form_data('from' => '2005-01-01', 'to' => '2005-03-31')
|
197
|
-
#
|
198
|
-
# res = Net::HTTP.start(uri.hostname, uri.port) do |http|
|
199
|
-
# http.request(req)
|
200
|
-
# end
|
201
|
-
#
|
202
|
-
# case res
|
203
|
-
# when Net::HTTPSuccess, Net::HTTPRedirection
|
204
|
-
# # OK
|
205
|
-
# else
|
206
|
-
# res.value
|
207
|
-
# end
|
208
|
-
#
|
209
|
-
# To send multipart/form-data use Net::HTTPHeader#set_form:
|
210
|
-
#
|
211
|
-
# req = Net::HTTP::Post.new(uri)
|
212
|
-
# req.set_form([['upload', File.open('foo.bar')]], 'multipart/form-data')
|
213
|
-
#
|
214
|
-
# Other requests that can contain a body such as PUT can be created in the same
|
215
|
-
# way using the corresponding request class (Net::HTTP::Put).
|
216
|
-
#
|
217
|
-
# ### Setting Headers
|
218
|
-
#
|
219
|
-
# The following example performs a conditional GET using the If-Modified-Since
|
220
|
-
# header. If the files has not been modified since the time in the header a Not
|
221
|
-
# Modified response will be returned. See RFC 2616 section 9.3 for further
|
222
|
-
# details.
|
223
|
-
#
|
224
|
-
# uri = URI('http://example.com/cached_response')
|
225
|
-
# file = File.stat 'cached_response'
|
226
|
-
#
|
227
|
-
# req = Net::HTTP::Get.new(uri)
|
228
|
-
# req['If-Modified-Since'] = file.mtime.rfc2822
|
229
|
-
#
|
230
|
-
# res = Net::HTTP.start(uri.hostname, uri.port) {|http|
|
231
|
-
# http.request(req)
|
232
|
-
# }
|
233
|
-
#
|
234
|
-
# open 'cached_response', 'w' do |io|
|
235
|
-
# io.write res.body
|
236
|
-
# end if res.is_a?(Net::HTTPSuccess)
|
237
|
-
#
|
238
|
-
# ### Basic Authentication
|
365
|
+
# ## Basic Authentication
|
239
366
|
#
|
240
367
|
# Basic authentication is performed according to
|
241
368
|
# [RFC2617](http://www.ietf.org/rfc/rfc2617.txt).
|
@@ -250,7 +377,7 @@ module Net
|
|
250
377
|
# }
|
251
378
|
# puts res.body
|
252
379
|
#
|
253
|
-
#
|
380
|
+
# ## Streaming Response Bodies
|
254
381
|
#
|
255
382
|
# By default Net::HTTP reads an entire response into memory. If you are
|
256
383
|
# handling large files or wish to implement a progress bar you can instead
|
@@ -270,7 +397,7 @@ module Net
|
|
270
397
|
# end
|
271
398
|
# end
|
272
399
|
#
|
273
|
-
#
|
400
|
+
# ## HTTPS
|
274
401
|
#
|
275
402
|
# HTTPS is enabled for an HTTP connection by Net::HTTP#use_ssl=.
|
276
403
|
#
|
@@ -291,7 +418,7 @@ module Net
|
|
291
418
|
# In previous versions of Ruby you would need to require 'net/https' to use
|
292
419
|
# HTTPS. This is no longer true.
|
293
420
|
#
|
294
|
-
#
|
421
|
+
# ## Proxies
|
295
422
|
#
|
296
423
|
# Net::HTTP will automatically create a proxy from the `http_proxy` environment
|
297
424
|
# variable if it is present. To disable use of `http_proxy`, pass `nil` for the
|
@@ -309,7 +436,7 @@ module Net
|
|
309
436
|
# See Net::HTTP.new for further details and examples such as proxies that
|
310
437
|
# require a username and password.
|
311
438
|
#
|
312
|
-
#
|
439
|
+
# ## Compression
|
313
440
|
#
|
314
441
|
# Net::HTTP automatically adds Accept-Encoding for compression of response
|
315
442
|
# bodies and automatically decompresses gzip and deflate responses unless a
|
@@ -317,171 +444,6 @@ module Net
|
|
317
444
|
#
|
318
445
|
# Compression can be disabled through the Accept-Encoding: identity header.
|
319
446
|
#
|
320
|
-
# ## HTTP Request Classes
|
321
|
-
#
|
322
|
-
# Here is the HTTP request class hierarchy.
|
323
|
-
#
|
324
|
-
# * Net::HTTPRequest
|
325
|
-
# * Net::HTTP::Get
|
326
|
-
# * Net::HTTP::Head
|
327
|
-
# * Net::HTTP::Post
|
328
|
-
# * Net::HTTP::Patch
|
329
|
-
# * Net::HTTP::Put
|
330
|
-
# * Net::HTTP::Proppatch
|
331
|
-
# * Net::HTTP::Lock
|
332
|
-
# * Net::HTTP::Unlock
|
333
|
-
# * Net::HTTP::Options
|
334
|
-
# * Net::HTTP::Propfind
|
335
|
-
# * Net::HTTP::Delete
|
336
|
-
# * Net::HTTP::Move
|
337
|
-
# * Net::HTTP::Copy
|
338
|
-
# * Net::HTTP::Mkcol
|
339
|
-
# * Net::HTTP::Trace
|
340
|
-
#
|
341
|
-
#
|
342
|
-
#
|
343
|
-
# ## HTTP Response Classes
|
344
|
-
#
|
345
|
-
# Here is HTTP response class hierarchy. All classes are defined in Net module
|
346
|
-
# and are subclasses of Net::HTTPResponse.
|
347
|
-
#
|
348
|
-
# HTTPUnknownResponse
|
349
|
-
# : For unhandled HTTP extensions
|
350
|
-
# HTTPInformation
|
351
|
-
# : 1xx
|
352
|
-
# HTTPContinue
|
353
|
-
# : 100
|
354
|
-
# HTTPSwitchProtocol
|
355
|
-
# : 101
|
356
|
-
# HTTPProcessing
|
357
|
-
# : 102
|
358
|
-
# HTTPEarlyHints
|
359
|
-
# : 103
|
360
|
-
# HTTPSuccess
|
361
|
-
# : 2xx
|
362
|
-
# HTTPOK
|
363
|
-
# : 200
|
364
|
-
# HTTPCreated
|
365
|
-
# : 201
|
366
|
-
# HTTPAccepted
|
367
|
-
# : 202
|
368
|
-
# HTTPNonAuthoritativeInformation
|
369
|
-
# : 203
|
370
|
-
# HTTPNoContent
|
371
|
-
# : 204
|
372
|
-
# HTTPResetContent
|
373
|
-
# : 205
|
374
|
-
# HTTPPartialContent
|
375
|
-
# : 206
|
376
|
-
# HTTPMultiStatus
|
377
|
-
# : 207
|
378
|
-
# HTTPAlreadyReported
|
379
|
-
# : 208
|
380
|
-
# HTTPIMUsed
|
381
|
-
# : 226
|
382
|
-
# HTTPRedirection
|
383
|
-
# : 3xx
|
384
|
-
# HTTPMultipleChoices
|
385
|
-
# : 300
|
386
|
-
# HTTPMovedPermanently
|
387
|
-
# : 301
|
388
|
-
# HTTPFound
|
389
|
-
# : 302
|
390
|
-
# HTTPSeeOther
|
391
|
-
# : 303
|
392
|
-
# HTTPNotModified
|
393
|
-
# : 304
|
394
|
-
# HTTPUseProxy
|
395
|
-
# : 305
|
396
|
-
# HTTPTemporaryRedirect
|
397
|
-
# : 307
|
398
|
-
# HTTPPermanentRedirect
|
399
|
-
# : 308
|
400
|
-
# HTTPClientError
|
401
|
-
# : 4xx
|
402
|
-
# HTTPBadRequest
|
403
|
-
# : 400
|
404
|
-
# HTTPUnauthorized
|
405
|
-
# : 401
|
406
|
-
# HTTPPaymentRequired
|
407
|
-
# : 402
|
408
|
-
# HTTPForbidden
|
409
|
-
# : 403
|
410
|
-
# HTTPNotFound
|
411
|
-
# : 404
|
412
|
-
# HTTPMethodNotAllowed
|
413
|
-
# : 405
|
414
|
-
# HTTPNotAcceptable
|
415
|
-
# : 406
|
416
|
-
# HTTPProxyAuthenticationRequired
|
417
|
-
# : 407
|
418
|
-
# HTTPRequestTimeOut
|
419
|
-
# : 408
|
420
|
-
# HTTPConflict
|
421
|
-
# : 409
|
422
|
-
# HTTPGone
|
423
|
-
# : 410
|
424
|
-
# HTTPLengthRequired
|
425
|
-
# : 411
|
426
|
-
# HTTPPreconditionFailed
|
427
|
-
# : 412
|
428
|
-
# HTTPRequestEntityTooLarge
|
429
|
-
# : 413
|
430
|
-
# HTTPRequestURITooLong
|
431
|
-
# : 414
|
432
|
-
# HTTPUnsupportedMediaType
|
433
|
-
# : 415
|
434
|
-
# HTTPRequestedRangeNotSatisfiable
|
435
|
-
# : 416
|
436
|
-
# HTTPExpectationFailed
|
437
|
-
# : 417
|
438
|
-
# HTTPMisdirectedRequest
|
439
|
-
# : 421
|
440
|
-
# HTTPUnprocessableEntity
|
441
|
-
# : 422
|
442
|
-
# HTTPLocked
|
443
|
-
# : 423
|
444
|
-
# HTTPFailedDependency
|
445
|
-
# : 424
|
446
|
-
# HTTPUpgradeRequired
|
447
|
-
# : 426
|
448
|
-
# HTTPPreconditionRequired
|
449
|
-
# : 428
|
450
|
-
# HTTPTooManyRequests
|
451
|
-
# : 429
|
452
|
-
# HTTPRequestHeaderFieldsTooLarge
|
453
|
-
# : 431
|
454
|
-
# HTTPUnavailableForLegalReasons
|
455
|
-
# : 451
|
456
|
-
# HTTPServerError
|
457
|
-
# : 5xx
|
458
|
-
# HTTPInternalServerError
|
459
|
-
# : 500
|
460
|
-
# HTTPNotImplemented
|
461
|
-
# : 501
|
462
|
-
# HTTPBadGateway
|
463
|
-
# : 502
|
464
|
-
# HTTPServiceUnavailable
|
465
|
-
# : 503
|
466
|
-
# HTTPGatewayTimeOut
|
467
|
-
# : 504
|
468
|
-
# HTTPVersionNotSupported
|
469
|
-
# : 505
|
470
|
-
# HTTPVariantAlsoNegotiates
|
471
|
-
# : 506
|
472
|
-
# HTTPInsufficientStorage
|
473
|
-
# : 507
|
474
|
-
# HTTPLoopDetected
|
475
|
-
# : 508
|
476
|
-
# HTTPNotExtended
|
477
|
-
# : 510
|
478
|
-
# HTTPNetworkAuthenticationRequired
|
479
|
-
# : 511
|
480
|
-
#
|
481
|
-
#
|
482
|
-
# There is also the Net::HTTPBadResponse exception which is raised when there is
|
483
|
-
# a protocol error.
|
484
|
-
#
|
485
447
|
class HTTP < Protocol
|
486
448
|
# :stopdoc:
|
487
449
|
VERSION: String
|
@@ -496,8 +458,7 @@ module Net
|
|
496
458
|
# rdoc-file=lib/net/http.rb
|
497
459
|
# - version_1_2()
|
498
460
|
# -->
|
499
|
-
#
|
500
|
-
# later.
|
461
|
+
# Returns `true`; retained for compatibility.
|
501
462
|
#
|
502
463
|
def self.version_1_2: () -> ::TrueClass
|
503
464
|
|
@@ -505,7 +466,7 @@ module Net
|
|
505
466
|
# rdoc-file=lib/net/http.rb
|
506
467
|
# - version_1_2?()
|
507
468
|
# -->
|
508
|
-
# Returns true
|
469
|
+
# Returns `true`; retained for compatibility.
|
509
470
|
#
|
510
471
|
def self.version_1_2?: () -> ::TrueClass
|
511
472
|
|
@@ -522,65 +483,57 @@ module Net
|
|
522
483
|
|
523
484
|
# <!--
|
524
485
|
# rdoc-file=lib/net/http.rb
|
525
|
-
# - get_print(
|
486
|
+
# - Net::HTTP.get_print(hostname, path, port = 80) -> nil
|
487
|
+
# - Net::HTTP:get_print(uri, headers = {}, port = uri.port) -> nil
|
526
488
|
# -->
|
527
|
-
#
|
528
|
-
# either be specified as (`uri`, `headers`), or as (`host`, `path`, `port` =
|
529
|
-
# 80); so:
|
530
|
-
#
|
531
|
-
# Net::HTTP.get_print URI('http://www.example.com/index.html')
|
532
|
-
#
|
533
|
-
# or:
|
534
|
-
#
|
535
|
-
# Net::HTTP.get_print 'www.example.com', '/index.html'
|
536
|
-
#
|
537
|
-
# you can also specify request headers:
|
538
|
-
#
|
539
|
-
# Net::HTTP.get_print URI('http://www.example.com/index.html'), { 'Accept' => 'text/html' }
|
489
|
+
# Like Net::HTTP.get, but writes the returned body to $stdout; returns `nil`.
|
540
490
|
#
|
541
491
|
def self.get_print: (URI::Generic uri, ?Hash[String, untyped] header) -> void
|
542
492
|
| (String host, String path, ?Integer port) -> void
|
543
493
|
|
544
494
|
# <!--
|
545
495
|
# rdoc-file=lib/net/http.rb
|
546
|
-
# - get(
|
496
|
+
# - Net::HTTP.get(hostname, path, port = 80) -> body
|
497
|
+
# - Net::HTTP:get(uri, headers = {}, port = uri.port) -> body
|
547
498
|
# -->
|
548
|
-
# Sends a GET request
|
549
|
-
# The target can either be specified as (`uri`, `headers`), or as (`host`,
|
550
|
-
# `path`, `port` = 80); so:
|
499
|
+
# Sends a GET request and returns the HTTP response body as a string.
|
551
500
|
#
|
552
|
-
#
|
501
|
+
# With string arguments `hostname` and `path`:
|
502
|
+
#
|
503
|
+
# hostname = 'jsonplaceholder.typicode.com'
|
504
|
+
# path = '/todos/1'
|
505
|
+
# puts Net::HTTP.get(hostname, path)
|
506
|
+
#
|
507
|
+
# Output:
|
508
|
+
#
|
509
|
+
# {
|
510
|
+
# "userId": 1,
|
511
|
+
# "id": 1,
|
512
|
+
# "title": "delectus aut autem",
|
513
|
+
# "completed": false
|
514
|
+
# }
|
553
515
|
#
|
554
|
-
#
|
516
|
+
# With URI object `uri` and optional hash argument `headers`:
|
555
517
|
#
|
556
|
-
#
|
518
|
+
# uri = URI('https://jsonplaceholder.typicode.com/todos/1')
|
519
|
+
# headers = {'Content-type' => 'application/json; charset=UTF-8'}
|
520
|
+
# Net::HTTP.get(uri, headers)
|
557
521
|
#
|
558
|
-
#
|
522
|
+
# Related:
|
559
523
|
#
|
560
|
-
#
|
524
|
+
# * Net::HTTP::Get: request class for HTTP method `GET`.
|
525
|
+
# * Net::HTTP#get: convenience method for HTTP method `GET`.
|
561
526
|
#
|
562
527
|
def self.get: (URI::Generic uri, ?Hash[String, untyped] header) -> String
|
563
528
|
| (String host, String path, ?Integer port) -> String
|
564
529
|
|
565
530
|
# <!--
|
566
531
|
# rdoc-file=lib/net/http.rb
|
567
|
-
# - get_response(
|
532
|
+
# - Net::HTTP.get_response(hostname, path, port = 80) -> http_response
|
533
|
+
# - Net::HTTP:get_response(uri, headers = {}, port = uri.port) -> http_response
|
568
534
|
# -->
|
569
|
-
#
|
570
|
-
#
|
571
|
-
# `headers`), or as (`host`, `path`, `port` = 80); so:
|
572
|
-
#
|
573
|
-
# res = Net::HTTP.get_response(URI('http://www.example.com/index.html'))
|
574
|
-
# print res.body
|
575
|
-
#
|
576
|
-
# or:
|
577
|
-
#
|
578
|
-
# res = Net::HTTP.get_response('www.example.com', '/index.html')
|
579
|
-
# print res.body
|
580
|
-
#
|
581
|
-
# you can also specify request headers:
|
582
|
-
#
|
583
|
-
# Net::HTTP.get_response(URI('http://www.example.com/index.html'), { 'Accept' => 'text/html' })
|
535
|
+
# Like Net::HTTP.get, but returns a Net::HTTPResponse object instead of the body
|
536
|
+
# string.
|
584
537
|
#
|
585
538
|
def self.get_response: (URI::Generic uri, ?Hash[String, untyped] header) ?{ (Net::HTTPResponse) -> void } -> Net::HTTPResponse
|
586
539
|
| (String host, String path, ?Integer port) -> Net::HTTPResponse
|
@@ -589,16 +542,30 @@ module Net
|
|
589
542
|
# rdoc-file=lib/net/http.rb
|
590
543
|
# - post(url, data, header = nil)
|
591
544
|
# -->
|
592
|
-
# Posts data to
|
545
|
+
# Posts data to a host; returns a Net::HTTPResponse object.
|
593
546
|
#
|
594
|
-
#
|
547
|
+
# Argument `url` must be a URL; argument `data` must be a string:
|
548
|
+
#
|
549
|
+
# _uri = uri.dup
|
550
|
+
# _uri.path = '/posts'
|
551
|
+
# data = '{"title": "foo", "body": "bar", "userId": 1}'
|
552
|
+
# headers = {'content-type': 'application/json'}
|
553
|
+
# res = Net::HTTP.post(_uri, data, headers) # => #<Net::HTTPCreated 201 Created readbody=true>
|
554
|
+
# puts res.body
|
555
|
+
#
|
556
|
+
# Output:
|
595
557
|
#
|
596
|
-
#
|
597
|
-
#
|
558
|
+
# {
|
559
|
+
# "title": "foo",
|
560
|
+
# "body": "bar",
|
561
|
+
# "userId": 1,
|
562
|
+
# "id": 101
|
563
|
+
# }
|
564
|
+
#
|
565
|
+
# Related:
|
598
566
|
#
|
599
|
-
#
|
600
|
-
#
|
601
|
-
# "Content-Type" => "application/json"
|
567
|
+
# * Net::HTTP::Post: request class for HTTP method `POST`.
|
568
|
+
# * Net::HTTP#post: convenience method for HTTP method `POST`.
|
602
569
|
#
|
603
570
|
def self.post: (URI::Generic url, String data, ?Hash[String, untyped] header) -> Net::HTTPResponse
|
604
571
|
|
@@ -606,21 +573,24 @@ module Net
|
|
606
573
|
# rdoc-file=lib/net/http.rb
|
607
574
|
# - post_form(url, params)
|
608
575
|
# -->
|
609
|
-
# Posts
|
610
|
-
# provided as a Hash mapping from String to String. Example:
|
576
|
+
# Posts data to a host; returns a Net::HTTPResponse object.
|
611
577
|
#
|
612
|
-
#
|
578
|
+
# Argument `url` must be a URI; argument `data` must be a hash:
|
613
579
|
#
|
614
|
-
#
|
615
|
-
#
|
616
|
-
#
|
617
|
-
#
|
618
|
-
#
|
580
|
+
# _uri = uri.dup
|
581
|
+
# _uri.path = '/posts'
|
582
|
+
# data = {title: 'foo', body: 'bar', userId: 1}
|
583
|
+
# res = Net::HTTP.post_form(_uri, data) # => #<Net::HTTPCreated 201 Created readbody=true>
|
584
|
+
# puts res.body
|
619
585
|
#
|
620
|
-
#
|
586
|
+
# Output:
|
621
587
|
#
|
622
|
-
#
|
623
|
-
#
|
588
|
+
# {
|
589
|
+
# "title": "foo",
|
590
|
+
# "body": "bar",
|
591
|
+
# "userId": "1",
|
592
|
+
# "id": 101
|
593
|
+
# }
|
624
594
|
#
|
625
595
|
def self.post_form: (URI::Generic url, Hash[String, untyped] params) -> Net::HTTPResponse
|
626
596
|
|
@@ -628,7 +598,9 @@ module Net
|
|
628
598
|
# rdoc-file=lib/net/http.rb
|
629
599
|
# - default_port()
|
630
600
|
# -->
|
631
|
-
#
|
601
|
+
# Returns intger `80`, the default port to use for HTTP requests:
|
602
|
+
#
|
603
|
+
# Net::HTTP.default_port # => 80
|
632
604
|
#
|
633
605
|
def self.default_port: () -> Integer
|
634
606
|
|
@@ -636,7 +608,9 @@ module Net
|
|
636
608
|
# rdoc-file=lib/net/http.rb
|
637
609
|
# - http_default_port()
|
638
610
|
# -->
|
639
|
-
#
|
611
|
+
# Returns integer `80`, the default port to use for HTTP requests:
|
612
|
+
#
|
613
|
+
# Net::HTTP.http_default_port # => 80
|
640
614
|
#
|
641
615
|
def self.http_default_port: () -> Integer
|
642
616
|
|
@@ -644,48 +618,100 @@ module Net
|
|
644
618
|
# rdoc-file=lib/net/http.rb
|
645
619
|
# - https_default_port()
|
646
620
|
# -->
|
647
|
-
#
|
621
|
+
# Returns integer `443`, the default port to use for HTTPS requests:
|
622
|
+
#
|
623
|
+
# Net::HTTP.https_default_port # => 443
|
648
624
|
#
|
649
625
|
def self.https_default_port: () -> Integer
|
650
626
|
|
651
627
|
# <!--
|
652
628
|
# rdoc-file=lib/net/http.rb
|
653
|
-
# - HTTP.start(address, port, p_addr, p_port, p_user, p_pass,
|
654
|
-
# - HTTP.start(address, port=nil, p_addr
|
655
|
-
# -->
|
656
|
-
# Creates a new Net::HTTP object,
|
657
|
-
#
|
658
|
-
#
|
659
|
-
#
|
660
|
-
# *
|
661
|
-
#
|
662
|
-
#
|
663
|
-
#
|
664
|
-
#
|
665
|
-
#
|
666
|
-
#
|
667
|
-
#
|
668
|
-
#
|
669
|
-
#
|
670
|
-
#
|
671
|
-
#
|
672
|
-
# *
|
673
|
-
#
|
674
|
-
#
|
675
|
-
#
|
676
|
-
#
|
677
|
-
#
|
678
|
-
#
|
679
|
-
#
|
680
|
-
#
|
681
|
-
#
|
682
|
-
#
|
683
|
-
#
|
684
|
-
#
|
685
|
-
#
|
686
|
-
#
|
687
|
-
# the
|
688
|
-
#
|
629
|
+
# - HTTP.start(address, port = nil, p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil, opts) -> http
|
630
|
+
# - HTTP.start(address, port = nil, p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil, opts) {|http| ... } -> object
|
631
|
+
# -->
|
632
|
+
# Creates a new Net::HTTP object, `http`, via Net::HTTP.new:
|
633
|
+
#
|
634
|
+
# Net::HTTP.new(address, port, p_addr, p_port, p_user, p_pass)
|
635
|
+
#
|
636
|
+
# * For arguments `hostname` through `p_pass`, see Net::HTTP.new.
|
637
|
+
# * For argument `opts`, see below.
|
638
|
+
#
|
639
|
+
#
|
640
|
+
# Note: If `port` is `nil` and `opts[:use_ssl]` is a truthy value, the value
|
641
|
+
# passed to `new` is Net::HTTP.https_default_port, not `port`.
|
642
|
+
#
|
643
|
+
# With no block given:
|
644
|
+
#
|
645
|
+
# * Calls `http.start` with no block (see #start), which opens a TCP
|
646
|
+
# connection and HTTP session.
|
647
|
+
# * Returns `http`.
|
648
|
+
# * The caller should call #finish to close the session:
|
649
|
+
#
|
650
|
+
# http = Net::HTTP.start(hostname)
|
651
|
+
# http.started? # => true
|
652
|
+
# http.finish
|
653
|
+
# http.started? # => false
|
654
|
+
#
|
655
|
+
#
|
656
|
+
# With a block given:
|
657
|
+
#
|
658
|
+
# * Calls `http.start` with the block (see #start), which:
|
659
|
+
#
|
660
|
+
# * Opens a TCP connection and HTTP session.
|
661
|
+
# * Calls the block, which may make any number of requests to the host.
|
662
|
+
# * Closes the HTTP session and TCP connection on block exit.
|
663
|
+
# * Returns the block's value `object`.
|
664
|
+
#
|
665
|
+
#
|
666
|
+
# * Returns `object`.
|
667
|
+
#
|
668
|
+
#
|
669
|
+
# Example:
|
670
|
+
#
|
671
|
+
# hostname = 'jsonplaceholder.typicode.com'
|
672
|
+
# Net::HTTP.start(hostname) do |http|
|
673
|
+
# puts http.get('/todos/1').body
|
674
|
+
# puts http.get('/todos/2').body
|
675
|
+
# end
|
676
|
+
#
|
677
|
+
# Output:
|
678
|
+
#
|
679
|
+
# {
|
680
|
+
# "userId": 1,
|
681
|
+
# "id": 1,
|
682
|
+
# "title": "delectus aut autem",
|
683
|
+
# "completed": false
|
684
|
+
# }
|
685
|
+
# {
|
686
|
+
# "userId": 1,
|
687
|
+
# "id": 2,
|
688
|
+
# "title": "quis ut nam facilis et officia qui",
|
689
|
+
# "completed": false
|
690
|
+
# }
|
691
|
+
#
|
692
|
+
# If the last argument given is a hash, it is the `opts` hash, where each key is
|
693
|
+
# a method or accessor to be called, and its value is the value to be set.
|
694
|
+
#
|
695
|
+
# The keys may include:
|
696
|
+
#
|
697
|
+
# * #ca_file
|
698
|
+
# * #ca_path
|
699
|
+
# * #cert
|
700
|
+
# * #cert_store
|
701
|
+
# * #ciphers
|
702
|
+
# * #close_on_empty_response
|
703
|
+
# * `ipaddr` (calls #ipaddr=)
|
704
|
+
# * #keep_alive_timeout
|
705
|
+
# * #key
|
706
|
+
# * #open_timeout
|
707
|
+
# * #read_timeout
|
708
|
+
# * #ssl_timeout
|
709
|
+
# * #ssl_version
|
710
|
+
# * `use_ssl` (calls #use_ssl=)
|
711
|
+
# * #verify_callback
|
712
|
+
# * #verify_depth
|
713
|
+
# * #verify_mode
|
714
|
+
# * #write_timeout
|
689
715
|
#
|
690
716
|
def self.start: (String address, ?Integer? port, ?String | :ENV | nil p_addr, ?Integer? p_port, ?String? p_user, ?String? p_pass, ?Hash[Symbol, untyped]? opt) -> Net::HTTP
|
691
717
|
| [T] (String address, ?Integer? port, ?String | :ENV | nil p_addr, ?Integer? p_port, ?String? p_user, ?String? p_pass, ?Hash[Symbol, untyped]? opt) { (Net::HTTP) -> T } -> T
|
@@ -711,6 +737,10 @@ module Net
|
|
711
737
|
# rdoc-file=lib/net/http.rb
|
712
738
|
# - inspect()
|
713
739
|
# -->
|
740
|
+
# Returns a string representation of `self`:
|
741
|
+
#
|
742
|
+
# Net::HTTP.new(hostname).inspect
|
743
|
+
# # => "#<Net::HTTP jsonplaceholder.typicode.com:80 open=false>"
|
714
744
|
#
|
715
745
|
def inspect: () -> String
|
716
746
|
|
@@ -721,11 +751,51 @@ module Net
|
|
721
751
|
# **WARNING** This method opens a serious security hole. Never use this method
|
722
752
|
# in production code.
|
723
753
|
#
|
724
|
-
# Sets
|
754
|
+
# Sets the output stream for debugging:
|
725
755
|
#
|
726
756
|
# http = Net::HTTP.new(hostname)
|
727
|
-
#
|
728
|
-
#
|
757
|
+
# File.open('t.tmp', 'w') do |file|
|
758
|
+
# http.set_debug_output(file)
|
759
|
+
# http.start
|
760
|
+
# http.get('/nosuch/1')
|
761
|
+
# http.finish
|
762
|
+
# end
|
763
|
+
# puts File.read('t.tmp')
|
764
|
+
#
|
765
|
+
# Output:
|
766
|
+
#
|
767
|
+
# opening connection to jsonplaceholder.typicode.com:80...
|
768
|
+
# opened
|
769
|
+
# <- "GET /nosuch/1 HTTP/1.1\r\nAccept-Encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3\r\nAccept: */*\r\nUser-Agent: Ruby\r\nHost: jsonplaceholder.typicode.com\r\n\r\n"
|
770
|
+
# -> "HTTP/1.1 404 Not Found\r\n"
|
771
|
+
# -> "Date: Mon, 12 Dec 2022 21:14:11 GMT\r\n"
|
772
|
+
# -> "Content-Type: application/json; charset=utf-8\r\n"
|
773
|
+
# -> "Content-Length: 2\r\n"
|
774
|
+
# -> "Connection: keep-alive\r\n"
|
775
|
+
# -> "X-Powered-By: Express\r\n"
|
776
|
+
# -> "X-Ratelimit-Limit: 1000\r\n"
|
777
|
+
# -> "X-Ratelimit-Remaining: 999\r\n"
|
778
|
+
# -> "X-Ratelimit-Reset: 1670879660\r\n"
|
779
|
+
# -> "Vary: Origin, Accept-Encoding\r\n"
|
780
|
+
# -> "Access-Control-Allow-Credentials: true\r\n"
|
781
|
+
# -> "Cache-Control: max-age=43200\r\n"
|
782
|
+
# -> "Pragma: no-cache\r\n"
|
783
|
+
# -> "Expires: -1\r\n"
|
784
|
+
# -> "X-Content-Type-Options: nosniff\r\n"
|
785
|
+
# -> "Etag: W/\"2-vyGp6PvFo4RvsFtPoIWeCReyIC8\"\r\n"
|
786
|
+
# -> "Via: 1.1 vegur\r\n"
|
787
|
+
# -> "CF-Cache-Status: MISS\r\n"
|
788
|
+
# -> "Server-Timing: cf-q-config;dur=1.3000000762986e-05\r\n"
|
789
|
+
# -> "Report-To: {\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v3?s=yOr40jo%2BwS1KHzhTlVpl54beJ5Wx2FcG4gGV0XVrh3X9OlR5q4drUn2dkt5DGO4GDcE%2BVXT7CNgJvGs%2BZleIyMu8CLieFiDIvOviOY3EhHg94m0ZNZgrEdpKD0S85S507l1vsEwEHkoTm%2Ff19SiO\"}],\"group\":\"cf-nel\",\"max_age\":604800}\r\n"
|
790
|
+
# -> "NEL: {\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}\r\n"
|
791
|
+
# -> "Server: cloudflare\r\n"
|
792
|
+
# -> "CF-RAY: 778977dc484ce591-DFW\r\n"
|
793
|
+
# -> "alt-svc: h3=\":443\"; ma=86400, h3-29=\":443\"; ma=86400\r\n"
|
794
|
+
# -> "\r\n"
|
795
|
+
# reading 2 bytes...
|
796
|
+
# -> "{}"
|
797
|
+
# read 2 bytes
|
798
|
+
# Conn keep-alive
|
729
799
|
#
|
730
800
|
def set_debug_output: (IO output) -> void
|
731
801
|
|
@@ -771,13 +841,35 @@ module Net
|
|
771
841
|
# rdoc-file=lib/net/http.rb
|
772
842
|
# - ipaddr()
|
773
843
|
# -->
|
774
|
-
#
|
844
|
+
# Returns the IP address for the connection.
|
845
|
+
#
|
846
|
+
# If the session has not been started, returns the value set by #ipaddr=, or
|
847
|
+
# `nil` if it has not been set:
|
848
|
+
#
|
849
|
+
# http = Net::HTTP.new(hostname)
|
850
|
+
# http.ipaddr # => nil
|
851
|
+
# http.ipaddr = '172.67.155.76'
|
852
|
+
# http.ipaddr # => "172.67.155.76"
|
853
|
+
#
|
854
|
+
# If the session has been started, returns the IP address from the socket:
|
855
|
+
#
|
856
|
+
# http = Net::HTTP.new(hostname)
|
857
|
+
# http.start
|
858
|
+
# http.ipaddr # => "172.67.155.76"
|
859
|
+
# http.finish
|
775
860
|
# ----
|
776
861
|
# <!--
|
777
862
|
# rdoc-file=lib/net/http.rb
|
778
863
|
# - ipaddr=(addr)
|
779
864
|
# -->
|
780
|
-
#
|
865
|
+
# Sets the IP address for the connection:
|
866
|
+
#
|
867
|
+
# http = Net::HTTP.new(hostname)
|
868
|
+
# http.ipaddr # => nil
|
869
|
+
# http.ipaddr = '172.67.155.76'
|
870
|
+
# http.ipaddr # => "172.67.155.76"
|
871
|
+
#
|
872
|
+
# The IP address may not be set if the session has been started.
|
781
873
|
#
|
782
874
|
attr_accessor ipaddr: String?
|
783
875
|
|
@@ -799,7 +891,16 @@ module Net
|
|
799
891
|
# rdoc-file=lib/net/http.rb
|
800
892
|
# - read_timeout=(sec)
|
801
893
|
# -->
|
802
|
-
#
|
894
|
+
# Sets the read timeout, in seconds, for `self` to integer `sec`; the initial
|
895
|
+
# value is 60.
|
896
|
+
#
|
897
|
+
# Argument `sec` must be a non-negative numeric value:
|
898
|
+
#
|
899
|
+
# http = Net::HTTP.new(hostname)
|
900
|
+
# http.read_timeout # => 60
|
901
|
+
# http.get('/todos/1') # => #<Net::HTTPOK 200 OK readbody=true>
|
902
|
+
# http.read_timeout = 0
|
903
|
+
# http.get('/todos/1') # Raises Net::ReadTimeout.
|
803
904
|
#
|
804
905
|
attr_accessor read_timeout: Float | Integer
|
805
906
|
|
@@ -814,7 +915,10 @@ module Net
|
|
814
915
|
# rdoc-file=lib/net/http.rb
|
815
916
|
# - write_timeout=(sec)
|
816
917
|
# -->
|
817
|
-
#
|
918
|
+
# Sets the write timeout, in seconds, for `self` to integer `sec`; the initial
|
919
|
+
# value is 60.
|
920
|
+
#
|
921
|
+
# Argument `sec` must be a non-negative numeric value.
|
818
922
|
#
|
819
923
|
attr_accessor write_timeout: Float | Integer
|
820
924
|
|
@@ -822,10 +926,15 @@ module Net
|
|
822
926
|
# rdoc-file=lib/net/http.rb
|
823
927
|
# - max_retries=(retries)
|
824
928
|
# -->
|
825
|
-
#
|
929
|
+
# Sets the maximum number of times to retry an idempotent request in case of
|
826
930
|
# Net::ReadTimeout, IOError, EOFError, Errno::ECONNRESET, Errno::ECONNABORTED,
|
827
|
-
# Errno::EPIPE, OpenSSL::SSL::SSLError, Timeout::Error.
|
828
|
-
#
|
931
|
+
# Errno::EPIPE, OpenSSL::SSL::SSLError, Timeout::Error. The initial value is 1.
|
932
|
+
#
|
933
|
+
# Argument `retries` must be a non-negative numeric value:
|
934
|
+
#
|
935
|
+
# http = Net::HTTP.new(hostname)
|
936
|
+
# http.max_retries = 2 # => 2
|
937
|
+
# http.max_retries # => 2
|
829
938
|
#
|
830
939
|
attr_accessor max_retries: Integer
|
831
940
|
|
@@ -1486,12 +1595,234 @@ module Net
|
|
1486
1595
|
end
|
1487
1596
|
|
1488
1597
|
# <!-- rdoc-file=lib/net/http/header.rb -->
|
1489
|
-
# The HTTPHeader module
|
1598
|
+
# The HTTPHeader module provides access to HTTP headers.
|
1599
|
+
#
|
1600
|
+
# The module is included in:
|
1601
|
+
#
|
1602
|
+
# * Net::HTTPGenericRequest (and therefore Net::HTTPRequest).
|
1603
|
+
# * Net::HTTPResponse.
|
1604
|
+
#
|
1605
|
+
#
|
1606
|
+
# The headers are a hash-like collection of key/value pairs called *fields*.
|
1607
|
+
#
|
1608
|
+
# ## Request and Response Fields
|
1609
|
+
#
|
1610
|
+
# Headers may be included in:
|
1611
|
+
#
|
1612
|
+
# * A Net::HTTPRequest object: the object's headers will be sent with the
|
1613
|
+
# request. Any fields may be defined in the request; see
|
1614
|
+
# [Setters](rdoc-ref:Net::HTTPHeader@Setters).
|
1615
|
+
# * A Net::HTTPResponse object: the objects headers are usually those returned
|
1616
|
+
# from the host. Fields may be retrieved from the object; see
|
1617
|
+
# [Getters](rdoc-ref:Net::HTTPHeader@Getters) and
|
1618
|
+
# [Iterators](rdoc-ref:Net::HTTPHeader@Iterators).
|
1619
|
+
#
|
1620
|
+
#
|
1621
|
+
# Exactly which fields should be sent or expected depends on the host; see:
|
1622
|
+
#
|
1623
|
+
# * [Request
|
1624
|
+
# fields](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Request_f
|
1625
|
+
# ields).
|
1626
|
+
# * [Response
|
1627
|
+
# fields](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Response_
|
1628
|
+
# fields).
|
1629
|
+
#
|
1630
|
+
#
|
1631
|
+
# ## About the Examples
|
1632
|
+
#
|
1633
|
+
# Examples here assume that `net/http` has been required (which also requires
|
1634
|
+
# `uri`):
|
1635
|
+
#
|
1636
|
+
# require 'net/http'
|
1637
|
+
#
|
1638
|
+
# Many code examples here use these example websites:
|
1639
|
+
#
|
1640
|
+
# * https://jsonplaceholder.typicode.com.
|
1641
|
+
# * http://example.com.
|
1642
|
+
#
|
1643
|
+
#
|
1644
|
+
# Some examples also assume these variables:
|
1645
|
+
#
|
1646
|
+
# uri = URI('https://jsonplaceholder.typicode.com')
|
1647
|
+
# uri.freeze # Examples may not modify.
|
1648
|
+
# hostname = uri.hostname # => "jsonplaceholder.typicode.com"
|
1649
|
+
# port = uri.port # => 443
|
1650
|
+
#
|
1651
|
+
# So that example requests may be written as:
|
1652
|
+
#
|
1653
|
+
# Net::HTTP.get(uri)
|
1654
|
+
# Net::HTTP.get(hostname, '/index.html')
|
1655
|
+
# Net::HTTP.start(hostname) do |http|
|
1656
|
+
# http.get('/todos/1')
|
1657
|
+
# http.get('/todos/2')
|
1658
|
+
# end
|
1659
|
+
#
|
1660
|
+
# An example that needs a modified URI first duplicates `uri`, then modifies the
|
1661
|
+
# duplicate:
|
1662
|
+
#
|
1663
|
+
# _uri = uri.dup
|
1664
|
+
# _uri.path = '/todos/1'
|
1665
|
+
#
|
1666
|
+
# ## Fields
|
1667
|
+
#
|
1668
|
+
# A header field is a key/value pair.
|
1669
|
+
#
|
1670
|
+
# ### Field Keys
|
1671
|
+
#
|
1672
|
+
# A field key may be:
|
1673
|
+
#
|
1674
|
+
# * A string: Key `'Accept'` is treated as if it were `'Accept'.downcase`;
|
1675
|
+
# i.e., `'accept'`.
|
1676
|
+
# * A symbol: Key `:Accept` is treated as if it were `:Accept.to_s.downcase`;
|
1677
|
+
# i.e., `'accept'`.
|
1678
|
+
#
|
1679
|
+
#
|
1680
|
+
# Examples:
|
1681
|
+
#
|
1682
|
+
# req = Net::HTTP::Get.new(uri)
|
1683
|
+
# req[:accept] # => "*/*"
|
1684
|
+
# req['Accept'] # => "*/*"
|
1685
|
+
# req['ACCEPT'] # => "*/*"
|
1686
|
+
#
|
1687
|
+
# req['accept'] = 'text/html'
|
1688
|
+
# req[:accept] = 'text/html'
|
1689
|
+
# req['ACCEPT'] = 'text/html'
|
1690
|
+
#
|
1691
|
+
# ### Field Values
|
1692
|
+
#
|
1693
|
+
# A field value may be returned as an array of strings or as a string:
|
1694
|
+
#
|
1695
|
+
# * These methods return field values as arrays:
|
1696
|
+
#
|
1697
|
+
# * #get_fields: Returns the array value for the given key, or `nil` if it
|
1698
|
+
# does not exist.
|
1699
|
+
# * #to_hash: Returns a hash of all header fields: each key is a field
|
1700
|
+
# name; its value is the array value for the field.
|
1701
|
+
#
|
1702
|
+
#
|
1703
|
+
# * These methods return field values as string; the string value for a field
|
1704
|
+
# is equivalent to `self[key.downcase.to_s].join(', '))`:
|
1705
|
+
#
|
1706
|
+
# * #[]: Returns the string value for the given key, or `nil` if it does
|
1707
|
+
# not exist.
|
1708
|
+
# * #fetch: Like #[], but accepts a default value to be returned if the
|
1709
|
+
# key does not exist.
|
1710
|
+
#
|
1711
|
+
#
|
1712
|
+
#
|
1713
|
+
# The field value may be set:
|
1714
|
+
#
|
1715
|
+
# * #[]=: Sets the value for the given key; the given value may be a string, a
|
1716
|
+
# symbol, an array, or a hash.
|
1717
|
+
# * #add_field: Adds a given value to a value for the given key (not
|
1718
|
+
# overwriting the existing value).
|
1719
|
+
# * #delete: Deletes the field for the given key.
|
1720
|
+
#
|
1721
|
+
#
|
1722
|
+
# Example field values:
|
1490
1723
|
#
|
1491
|
-
#
|
1492
|
-
#
|
1493
|
-
#
|
1494
|
-
#
|
1724
|
+
# * String:
|
1725
|
+
#
|
1726
|
+
# req['Accept'] = 'text/html' # => "text/html"
|
1727
|
+
# req['Accept'] # => "text/html"
|
1728
|
+
# req.get_fields('Accept') # => ["text/html"]
|
1729
|
+
#
|
1730
|
+
# * Symbol:
|
1731
|
+
#
|
1732
|
+
# req['Accept'] = :text # => :text
|
1733
|
+
# req['Accept'] # => "text"
|
1734
|
+
# req.get_fields('Accept') # => ["text"]
|
1735
|
+
#
|
1736
|
+
# * Simple array:
|
1737
|
+
#
|
1738
|
+
# req[:foo] = %w[bar baz bat]
|
1739
|
+
# req[:foo] # => "bar, baz, bat"
|
1740
|
+
# req.get_fields(:foo) # => ["bar", "baz", "bat"]
|
1741
|
+
#
|
1742
|
+
# * Simple hash:
|
1743
|
+
#
|
1744
|
+
# req[:foo] = {bar: 0, baz: 1, bat: 2}
|
1745
|
+
# req[:foo] # => "bar, 0, baz, 1, bat, 2"
|
1746
|
+
# req.get_fields(:foo) # => ["bar", "0", "baz", "1", "bat", "2"]
|
1747
|
+
#
|
1748
|
+
# * Nested:
|
1749
|
+
#
|
1750
|
+
# req[:foo] = [%w[bar baz], {bat: 0, bam: 1}]
|
1751
|
+
# req[:foo] # => "bar, baz, bat, 0, bam, 1"
|
1752
|
+
# req.get_fields(:foo) # => ["bar", "baz", "bat", "0", "bam", "1"]
|
1753
|
+
#
|
1754
|
+
# req[:foo] = {bar: %w[baz bat], bam: {bah: 0, bad: 1}}
|
1755
|
+
# req[:foo] # => "bar, baz, bat, bam, bah, 0, bad, 1"
|
1756
|
+
# req.get_fields(:foo) # => ["bar", "baz", "bat", "bam", "bah", "0", "bad", "1"]
|
1757
|
+
#
|
1758
|
+
#
|
1759
|
+
# ## Convenience Methods
|
1760
|
+
#
|
1761
|
+
# Various convenience methods retrieve values, set values, query values, set
|
1762
|
+
# form values, or iterate over fields.
|
1763
|
+
#
|
1764
|
+
# ### Setters
|
1765
|
+
#
|
1766
|
+
# Method #[]= can set any field, but does little to validate the new value; some
|
1767
|
+
# of the other setter methods provide some validation:
|
1768
|
+
#
|
1769
|
+
# * #[]=: Sets the string or array value for the given key.
|
1770
|
+
# * #add_field: Creates or adds to the array value for the given key.
|
1771
|
+
# * #basic_auth: Sets the string authorization header for `'Authorization'`.
|
1772
|
+
# * #content_length=: Sets the integer length for field `'Content-Length`.
|
1773
|
+
# * #content_type=: Sets the string value for field `'Content-Type'`.
|
1774
|
+
# * #proxy_basic_auth: Sets the string authorization header for
|
1775
|
+
# `'Proxy-Authorization'`.
|
1776
|
+
# * #set_range: Sets the value for field `'Range'`.
|
1777
|
+
#
|
1778
|
+
#
|
1779
|
+
# ### Form Setters
|
1780
|
+
#
|
1781
|
+
# * #set_form: Sets an HTML form data set.
|
1782
|
+
# * #set_form_data: Sets header fields and a body from HTML form data.
|
1783
|
+
#
|
1784
|
+
#
|
1785
|
+
# ### Getters
|
1786
|
+
#
|
1787
|
+
# Method #[] can retrieve the value of any field that exists, but always as a
|
1788
|
+
# string; some of the other getter methods return something different from the
|
1789
|
+
# simple string value:
|
1790
|
+
#
|
1791
|
+
# * #[]: Returns the string field value for the given key.
|
1792
|
+
# * #content_length: Returns the integer value of field `'Content-Length'`.
|
1793
|
+
# * #content_range: Returns the Range value of field `'Content-Range'`.
|
1794
|
+
# * #content_type: Returns the string value of field `'Content-Type'`.
|
1795
|
+
# * #fetch: Returns the string field value for the given key.
|
1796
|
+
# * #get_fields: Returns the array field value for the given `key`.
|
1797
|
+
# * #main_type: Returns first part of the string value of field
|
1798
|
+
# `'Content-Type'`.
|
1799
|
+
# * #sub_type: Returns second part of the string value of field
|
1800
|
+
# `'Content-Type'`.
|
1801
|
+
# * #range: Returns an array of Range objects of field `'Range'`, or `nil`.
|
1802
|
+
# * #range_length: Returns the integer length of the range given in field
|
1803
|
+
# `'Content-Range'`.
|
1804
|
+
# * #type_params: Returns the string parameters for `'Content-Type'`.
|
1805
|
+
#
|
1806
|
+
#
|
1807
|
+
# ### Queries
|
1808
|
+
#
|
1809
|
+
# * #chunked?: Returns whether field `'Transfer-Encoding'` is set to
|
1810
|
+
# `'chunked'`.
|
1811
|
+
# * #connection_close?: Returns whether field `'Connection'` is set to
|
1812
|
+
# `'close'`.
|
1813
|
+
# * #connection_keep_alive?: Returns whether field `'Connection'` is set to
|
1814
|
+
# `'keep-alive'`.
|
1815
|
+
# * #key?: Returns whether a given key exists.
|
1816
|
+
#
|
1817
|
+
#
|
1818
|
+
# ### Iterators
|
1819
|
+
#
|
1820
|
+
# * #each_capitalized: Passes each field capitalized-name/value pair to the
|
1821
|
+
# block.
|
1822
|
+
# * #each_capitalized_name: Passes each capitalized field name to the block.
|
1823
|
+
# * #each_header: Passes each field name/value pair to the block.
|
1824
|
+
# * #each_name: Passes each field name to the block.
|
1825
|
+
# * #each_value: Passes each string field value to the block.
|
1495
1826
|
#
|
1496
1827
|
module HTTPHeader
|
1497
1828
|
# <!--
|
@@ -1511,8 +1842,15 @@ module Net
|
|
1511
1842
|
# rdoc-file=lib/net/http/header.rb
|
1512
1843
|
# - [](key)
|
1513
1844
|
# -->
|
1514
|
-
# Returns the
|
1515
|
-
#
|
1845
|
+
# Returns the string field value for the case-insensitive field `key`, or `nil`
|
1846
|
+
# if there is no such key; see [Fields](rdoc-ref:Net::HTTPHeader@Fields):
|
1847
|
+
#
|
1848
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
1849
|
+
# res['Connection'] # => "keep-alive"
|
1850
|
+
# res['Nosuch'] # => nil
|
1851
|
+
#
|
1852
|
+
# Note that some field values may be retrieved via convenience methods; see
|
1853
|
+
# [Getters](rdoc-ref:Net::HTTPHeader@Getters).
|
1516
1854
|
#
|
1517
1855
|
def []: (key key) -> (nil | String)
|
1518
1856
|
|
@@ -1520,7 +1858,17 @@ module Net
|
|
1520
1858
|
# rdoc-file=lib/net/http/header.rb
|
1521
1859
|
# - []=(key, val)
|
1522
1860
|
# -->
|
1523
|
-
# Sets the
|
1861
|
+
# Sets the value for the case-insensitive `key` to `val`, overwriting the
|
1862
|
+
# previous value if the field exists; see
|
1863
|
+
# [Fields](rdoc-ref:Net::HTTPHeader@Fields):
|
1864
|
+
#
|
1865
|
+
# req = Net::HTTP::Get.new(uri)
|
1866
|
+
# req['Accept'] # => "*/*"
|
1867
|
+
# req['Accept'] = 'text/html'
|
1868
|
+
# req['Accept'] # => "text/html"
|
1869
|
+
#
|
1870
|
+
# Note that some field values may be set via convenience methods; see
|
1871
|
+
# [Setters](rdoc-ref:Net::HTTPHeader@Setters).
|
1524
1872
|
#
|
1525
1873
|
def []=: (key key, untyped val) -> void
|
1526
1874
|
|
@@ -1528,20 +1876,18 @@ module Net
|
|
1528
1876
|
# rdoc-file=lib/net/http/header.rb
|
1529
1877
|
# - add_field(key, val)
|
1530
1878
|
# -->
|
1531
|
-
#
|
1532
|
-
#
|
1533
|
-
#
|
1534
|
-
#
|
1535
|
-
#
|
1536
|
-
#
|
1537
|
-
#
|
1538
|
-
#
|
1539
|
-
#
|
1540
|
-
#
|
1541
|
-
#
|
1542
|
-
#
|
1543
|
-
# p request['X-My-Header'] #=> "a, b, c"
|
1544
|
-
# p request.get_fields('X-My-Header') #=> ["a", "b", "c"]
|
1879
|
+
# Adds value `val` to the value array for field `key` if the field exists;
|
1880
|
+
# creates the field with the given `key` and `val` if it does not exist. see
|
1881
|
+
# [Fields](rdoc-ref:Net::HTTPHeader@Fields):
|
1882
|
+
#
|
1883
|
+
# req = Net::HTTP::Get.new(uri)
|
1884
|
+
# req.add_field('Foo', 'bar')
|
1885
|
+
# req['Foo'] # => "bar"
|
1886
|
+
# req.add_field('Foo', 'baz')
|
1887
|
+
# req['Foo'] # => "bar, baz"
|
1888
|
+
# req.add_field('Foo', %w[baz bam])
|
1889
|
+
# req['Foo'] # => "bar, baz, baz, bam"
|
1890
|
+
# req.get_fields('Foo') # => ["bar", "baz", "baz", "bam"]
|
1545
1891
|
#
|
1546
1892
|
def add_field: (key key, untyped val) -> void
|
1547
1893
|
|
@@ -1567,26 +1913,42 @@ module Net
|
|
1567
1913
|
# rdoc-file=lib/net/http/header.rb
|
1568
1914
|
# - get_fields(key)
|
1569
1915
|
# -->
|
1570
|
-
#
|
1571
|
-
#
|
1572
|
-
# case-insensitive `key`. This method allows you to get duplicated header
|
1573
|
-
# fields without any processing. See also #[].
|
1916
|
+
# Returns the array field value for the given `key`, or `nil` if there is no
|
1917
|
+
# such field; see [Fields](rdoc-ref:Net::HTTPHeader@Fields):
|
1574
1918
|
#
|
1575
|
-
#
|
1576
|
-
#
|
1577
|
-
#
|
1578
|
-
# p response['Set-Cookie']
|
1579
|
-
# #=> "session=al98axx; expires=Fri, 31-Dec-1999 23:58:23, query=rubyscript; expires=Fri, 31-Dec-1999 23:58:23"
|
1919
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
1920
|
+
# res.get_fields('Connection') # => ["keep-alive"]
|
1921
|
+
# res.get_fields('Nosuch') # => nil
|
1580
1922
|
#
|
1581
1923
|
def get_fields: (key key) -> (nil | Array[String])
|
1582
1924
|
|
1583
1925
|
# <!--
|
1584
1926
|
# rdoc-file=lib/net/http/header.rb
|
1585
|
-
# - fetch(key,
|
1927
|
+
# - fetch(key, default_val = nil) {|key| ... } -> object
|
1928
|
+
# - fetch(key, default_val = nil) -> value or default_val
|
1586
1929
|
# -->
|
1587
|
-
#
|
1588
|
-
# the
|
1589
|
-
#
|
1930
|
+
# With a block, returns the string value for `key` if it exists; otherwise
|
1931
|
+
# returns the value of the block; ignores the `default_val`; see
|
1932
|
+
# [Fields](rdoc-ref:Net::HTTPHeader@Fields):
|
1933
|
+
#
|
1934
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
1935
|
+
#
|
1936
|
+
# # Field exists; block not called.
|
1937
|
+
# res.fetch('Connection') do |value|
|
1938
|
+
# fail 'Cannot happen'
|
1939
|
+
# end # => "keep-alive"
|
1940
|
+
#
|
1941
|
+
# # Field does not exist; block called.
|
1942
|
+
# res.fetch('Nosuch') do |value|
|
1943
|
+
# value.downcase
|
1944
|
+
# end # => "nosuch"
|
1945
|
+
#
|
1946
|
+
# With no block, returns the string value for `key` if it exists; otherwise,
|
1947
|
+
# returns `default_val` if it was given; otherwise raises an exception:
|
1948
|
+
#
|
1949
|
+
# res.fetch('Connection', 'Foo') # => "keep-alive"
|
1950
|
+
# res.fetch('Nosuch', 'Foo') # => "Foo"
|
1951
|
+
# res.fetch('Nosuch') # Raises KeyError.
|
1590
1952
|
#
|
1591
1953
|
def fetch: (key key) -> String
|
1592
1954
|
| (key key, untyped) -> untyped
|
@@ -1596,14 +1958,24 @@ module Net
|
|
1596
1958
|
# rdoc-file=lib/net/http/header.rb
|
1597
1959
|
# - each_header() { |key| ... }
|
1598
1960
|
# -->
|
1599
|
-
#
|
1600
|
-
# the code block supplied.
|
1961
|
+
# Calls the block with each key/value pair:
|
1601
1962
|
#
|
1602
|
-
#
|
1963
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
1964
|
+
# res.each_header do |key, value|
|
1965
|
+
# p [key, value] if key.start_with?('c')
|
1966
|
+
# end
|
1603
1967
|
#
|
1604
|
-
#
|
1968
|
+
# Output:
|
1605
1969
|
#
|
1606
|
-
#
|
1970
|
+
# ["content-type", "application/json; charset=utf-8"]
|
1971
|
+
# ["connection", "keep-alive"]
|
1972
|
+
# ["cache-control", "max-age=43200"]
|
1973
|
+
# ["cf-cache-status", "HIT"]
|
1974
|
+
# ["cf-ray", "771d17e9bc542cf5-ORD"]
|
1975
|
+
#
|
1976
|
+
# Returns an enumerator if no block is given.
|
1977
|
+
#
|
1978
|
+
# Net::HTTPHeader#each is an alias for Net::HTTPHeader#each_header.
|
1607
1979
|
#
|
1608
1980
|
def each_header: () { (String, String) -> untyped } -> Hash[String, Array[String]]
|
1609
1981
|
| () -> Enumerator[[ String, String ], Hash[String, Array[String]]]
|
@@ -1619,11 +1991,25 @@ module Net
|
|
1619
1991
|
# rdoc-file=lib/net/http/header.rb
|
1620
1992
|
# - each_name() { |key| ... }
|
1621
1993
|
# -->
|
1622
|
-
#
|
1623
|
-
#
|
1994
|
+
# Calls the block with each field key:
|
1995
|
+
#
|
1996
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
1997
|
+
# res.each_key do |key|
|
1998
|
+
# p key if key.start_with?('c')
|
1999
|
+
# end
|
2000
|
+
#
|
2001
|
+
# Output:
|
2002
|
+
#
|
2003
|
+
# "content-type"
|
2004
|
+
# "connection"
|
2005
|
+
# "cache-control"
|
2006
|
+
# "cf-cache-status"
|
2007
|
+
# "cf-ray"
|
1624
2008
|
#
|
1625
2009
|
# Returns an enumerator if no block is given.
|
1626
2010
|
#
|
2011
|
+
# Net::HTTPHeader#each_name is an alias for Net::HTTPHeader#each_key.
|
2012
|
+
#
|
1627
2013
|
def each_name: () { (String) -> untyped } -> Hash[String, Array[String]]
|
1628
2014
|
| () -> Enumerator[String, Hash[String, Array[String]]]
|
1629
2015
|
|
@@ -1638,11 +2024,23 @@ module Net
|
|
1638
2024
|
# rdoc-file=lib/net/http/header.rb
|
1639
2025
|
# - each_capitalized_name() { |key| ... }
|
1640
2026
|
# -->
|
1641
|
-
#
|
1642
|
-
#
|
2027
|
+
# Calls the block with each capitalized field name:
|
2028
|
+
#
|
2029
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
2030
|
+
# res.each_capitalized_name do |key|
|
2031
|
+
# p key if key.start_with?('C')
|
2032
|
+
# end
|
1643
2033
|
#
|
1644
|
-
#
|
1645
|
-
#
|
2034
|
+
# Output:
|
2035
|
+
#
|
2036
|
+
# "Content-Type"
|
2037
|
+
# "Connection"
|
2038
|
+
# "Cache-Control"
|
2039
|
+
# "Cf-Cache-Status"
|
2040
|
+
# "Cf-Ray"
|
2041
|
+
#
|
2042
|
+
# The capitalization is system-dependent; see [Case
|
2043
|
+
# Mapping](rdoc-ref:case_mapping.rdoc).
|
1646
2044
|
#
|
1647
2045
|
# Returns an enumerator if no block is given.
|
1648
2046
|
#
|
@@ -1653,7 +2051,18 @@ module Net
|
|
1653
2051
|
# rdoc-file=lib/net/http/header.rb
|
1654
2052
|
# - each_value() { |value| ... }
|
1655
2053
|
# -->
|
1656
|
-
#
|
2054
|
+
# Calls the block with each string field value:
|
2055
|
+
#
|
2056
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
2057
|
+
# res.each_value do |value|
|
2058
|
+
# p value if value.start_with?('c')
|
2059
|
+
# end
|
2060
|
+
#
|
2061
|
+
# Output:
|
2062
|
+
#
|
2063
|
+
# "chunked"
|
2064
|
+
# "cf-q-config;dur=6.0000002122251e-06"
|
2065
|
+
# "cloudflare"
|
1657
2066
|
#
|
1658
2067
|
# Returns an enumerator if no block is given.
|
1659
2068
|
#
|
@@ -1664,7 +2073,13 @@ module Net
|
|
1664
2073
|
# rdoc-file=lib/net/http/header.rb
|
1665
2074
|
# - delete(key)
|
1666
2075
|
# -->
|
1667
|
-
# Removes
|
2076
|
+
# Removes the header for the given case-insensitive `key` (see
|
2077
|
+
# [Fields](rdoc-ref:Net::HTTPHeader@Fields)); returns the deleted value, or
|
2078
|
+
# `nil` if no such field exists:
|
2079
|
+
#
|
2080
|
+
# req = Net::HTTP::Get.new(uri)
|
2081
|
+
# req.delete('Accept') # => ["*/*"]
|
2082
|
+
# req.delete('Nosuch') # => nil
|
1668
2083
|
#
|
1669
2084
|
def delete: (key key) -> (Array[String] | nil)
|
1670
2085
|
|
@@ -1672,7 +2087,12 @@ module Net
|
|
1672
2087
|
# rdoc-file=lib/net/http/header.rb
|
1673
2088
|
# - key?(key)
|
1674
2089
|
# -->
|
1675
|
-
# true if `key`
|
2090
|
+
# Returns `true` if the field for the case-insensitive `key` exists, `false`
|
2091
|
+
# otherwise:
|
2092
|
+
#
|
2093
|
+
# req = Net::HTTP::Get.new(uri)
|
2094
|
+
# req.key?('Accept') # => true
|
2095
|
+
# req.key?('Nosuch') # => false
|
1676
2096
|
#
|
1677
2097
|
def key?: (key key) -> bool
|
1678
2098
|
|
@@ -1680,10 +2100,15 @@ module Net
|
|
1680
2100
|
# rdoc-file=lib/net/http/header.rb
|
1681
2101
|
# - to_hash()
|
1682
2102
|
# -->
|
1683
|
-
# Returns a
|
1684
|
-
#
|
1685
|
-
#
|
1686
|
-
#
|
2103
|
+
# Returns a hash of the key/value pairs:
|
2104
|
+
#
|
2105
|
+
# req = Net::HTTP::Get.new(uri)
|
2106
|
+
# req.to_hash
|
2107
|
+
# # =>
|
2108
|
+
# {"accept-encoding"=>["gzip;q=1.0,deflate;q=0.6,identity;q=0.3"],
|
2109
|
+
# "accept"=>["*/*"],
|
2110
|
+
# "user-agent"=>["Ruby"],
|
2111
|
+
# "host"=>["jsonplaceholder.typicode.com"]}
|
1687
2112
|
#
|
1688
2113
|
def to_hash: () -> Hash[String, Array[String]]
|
1689
2114
|
|
@@ -1691,12 +2116,10 @@ module Net
|
|
1691
2116
|
# rdoc-file=lib/net/http/header.rb
|
1692
2117
|
# - each_capitalized() { |capitalize(k), join(', ')| ... }
|
1693
2118
|
# -->
|
1694
|
-
#
|
2119
|
+
# Like #each_header, but the keys are returned in capitalized form.
|
1695
2120
|
#
|
1696
|
-
#
|
1697
|
-
#
|
1698
|
-
#
|
1699
|
-
# Returns an enumerator if no block is given.
|
2121
|
+
# Net::HTTPHeader#canonical_each is an alias for
|
2122
|
+
# Net::HTTPHeader#each_capitalized.
|
1700
2123
|
#
|
1701
2124
|
def each_capitalized: () { (String, String) -> untyped } -> Hash[String, Array[String]]
|
1702
2125
|
| () -> Enumerator[[ String, String ], Hash[String, Array[String]]]
|
@@ -1723,26 +2146,52 @@ module Net
|
|
1723
2146
|
# rdoc-file=lib/net/http/header.rb
|
1724
2147
|
# - range()
|
1725
2148
|
# -->
|
1726
|
-
# Returns an
|
1727
|
-
#
|
2149
|
+
# Returns an array of Range objects that represent the value of field `'Range'`,
|
2150
|
+
# or `nil` if there is no such field; see [Range request
|
2151
|
+
# header](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#range-request
|
2152
|
+
# -header):
|
2153
|
+
#
|
2154
|
+
# req = Net::HTTP::Get.new(uri)
|
2155
|
+
# req['Range'] = 'bytes=0-99,200-299,400-499'
|
2156
|
+
# req.range # => [0..99, 200..299, 400..499]
|
2157
|
+
# req.delete('Range')
|
2158
|
+
# req.range # # => nil
|
1728
2159
|
#
|
1729
2160
|
def range: () -> (nil | Array[Range[Integer]])
|
1730
2161
|
|
1731
2162
|
# <!--
|
1732
2163
|
# rdoc-file=lib/net/http/header.rb
|
1733
|
-
# - set_range(
|
2164
|
+
# - set_range(length) -> length
|
2165
|
+
# - set_range(offset, length) -> range
|
2166
|
+
# - set_range(begin..length) -> range
|
1734
2167
|
# -->
|
1735
|
-
# Sets the
|
1736
|
-
#
|
2168
|
+
# Sets the value for field `'Range'`; see [Range request
|
2169
|
+
# header](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#range-request
|
2170
|
+
# -header):
|
1737
2171
|
#
|
1738
|
-
#
|
1739
|
-
# req.set_range 0, 1023
|
2172
|
+
# With argument `length`:
|
1740
2173
|
#
|
1741
|
-
|
1742
|
-
|
1743
|
-
#
|
1744
|
-
#
|
1745
|
-
#
|
2174
|
+
# req = Net::HTTP::Get.new(uri)
|
2175
|
+
# req.set_range(100) # => 100
|
2176
|
+
# req['Range'] # => "bytes=0-99"
|
2177
|
+
#
|
2178
|
+
# With arguments `offset` and `length`:
|
2179
|
+
#
|
2180
|
+
# req.set_range(100, 100) # => 100...200
|
2181
|
+
# req['Range'] # => "bytes=100-199"
|
2182
|
+
#
|
2183
|
+
# With argument `range`:
|
2184
|
+
#
|
2185
|
+
# req.set_range(100..199) # => 100..199
|
2186
|
+
# req['Range'] # => "bytes=100-199"
|
2187
|
+
#
|
2188
|
+
# Net::HTTPHeader#range= is an alias for Net::HTTPHeader#set_range.
|
2189
|
+
#
|
2190
|
+
def set_range: (Range[Integer] | Numeric r, ?Integer? e) -> Range[Integer]
|
2191
|
+
|
2192
|
+
# <!--
|
2193
|
+
# rdoc-file=lib/net/http/header.rb
|
2194
|
+
# - range=(r, e = nil)
|
1746
2195
|
# -->
|
1747
2196
|
#
|
1748
2197
|
alias range= set_range
|
@@ -1751,8 +2200,15 @@ module Net
|
|
1751
2200
|
# rdoc-file=lib/net/http/header.rb
|
1752
2201
|
# - content_length()
|
1753
2202
|
# -->
|
1754
|
-
# Returns
|
1755
|
-
#
|
2203
|
+
# Returns the value of field `'Content-Length'` as an integer, or `nil` if there
|
2204
|
+
# is no such field; see [Content-Length request
|
2205
|
+
# header](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-lengt
|
2206
|
+
# h-request-header):
|
2207
|
+
#
|
2208
|
+
# res = Net::HTTP.get_response(hostname, '/nosuch/1')
|
2209
|
+
# res.content_length # => 2
|
2210
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
2211
|
+
# res.content_length # => nil
|
1756
2212
|
#
|
1757
2213
|
def content_length: () -> (nil | Integer)
|
1758
2214
|
|
@@ -1760,6 +2216,21 @@ module Net
|
|
1760
2216
|
# rdoc-file=lib/net/http/header.rb
|
1761
2217
|
# - content_length=(len)
|
1762
2218
|
# -->
|
2219
|
+
# Sets the value of field `'Content-Length'` to the given numeric; see
|
2220
|
+
# [Content-Length response
|
2221
|
+
# header](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-lengt
|
2222
|
+
# h-response-header):
|
2223
|
+
#
|
2224
|
+
# _uri = uri.dup
|
2225
|
+
# hostname = _uri.hostname # => "jsonplaceholder.typicode.com"
|
2226
|
+
# _uri.path = '/posts' # => "/posts"
|
2227
|
+
# req = Net::HTTP::Post.new(_uri) # => #<Net::HTTP::Post POST>
|
2228
|
+
# req.body = '{"title": "foo","body": "bar","userId": 1}'
|
2229
|
+
# req.content_length = req.body.size # => 42
|
2230
|
+
# req.content_type = 'application/json'
|
2231
|
+
# res = Net::HTTP.start(hostname) do |http|
|
2232
|
+
# http.request(req)
|
2233
|
+
# end # => #<Net::HTTPCreated 201 Created readbody=true>
|
1763
2234
|
#
|
1764
2235
|
def content_length=: (Integer len) -> void
|
1765
2236
|
|
@@ -1767,9 +2238,14 @@ module Net
|
|
1767
2238
|
# rdoc-file=lib/net/http/header.rb
|
1768
2239
|
# - chunked?()
|
1769
2240
|
# -->
|
1770
|
-
# Returns
|
1771
|
-
#
|
1772
|
-
#
|
2241
|
+
# Returns `true` if field `'Transfer-Encoding'` exists and has value
|
2242
|
+
# `'chunked'`, `false` otherwise; see [Transfer-Encoding response
|
2243
|
+
# header](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#transfer-enco
|
2244
|
+
# ding-response-header):
|
2245
|
+
#
|
2246
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
2247
|
+
# res['Transfer-Encoding'] # => "chunked"
|
2248
|
+
# res.chunked? # => true
|
1773
2249
|
#
|
1774
2250
|
def chunked?: () -> bool
|
1775
2251
|
|
@@ -1777,9 +2253,16 @@ module Net
|
|
1777
2253
|
# rdoc-file=lib/net/http/header.rb
|
1778
2254
|
# - content_range()
|
1779
2255
|
# -->
|
1780
|
-
# Returns a Range object
|
1781
|
-
#
|
1782
|
-
#
|
2256
|
+
# Returns a Range object representing the value of field `'Content-Range'`, or
|
2257
|
+
# `nil` if no such field exists; see [Content-Range response
|
2258
|
+
# header](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-range
|
2259
|
+
# -response-header):
|
2260
|
+
#
|
2261
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
2262
|
+
# res['Content-Range'] # => nil
|
2263
|
+
# res['Content-Range'] = 'bytes 0-499/1000'
|
2264
|
+
# res['Content-Range'] # => "bytes 0-499/1000"
|
2265
|
+
# res.content_range # => 0..499
|
1783
2266
|
#
|
1784
2267
|
def content_range: () -> (Range[Integer] | nil)
|
1785
2268
|
|
@@ -1787,7 +2270,16 @@ module Net
|
|
1787
2270
|
# rdoc-file=lib/net/http/header.rb
|
1788
2271
|
# - range_length()
|
1789
2272
|
# -->
|
1790
|
-
#
|
2273
|
+
# Returns the integer representing length of the value of field
|
2274
|
+
# `'Content-Range'`, or `nil` if no such field exists; see [Content-Range
|
2275
|
+
# response
|
2276
|
+
# header](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-range
|
2277
|
+
# -response-header):
|
2278
|
+
#
|
2279
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
2280
|
+
# res['Content-Range'] # => nil
|
2281
|
+
# res['Content-Range'] = 'bytes 0-499/1000'
|
2282
|
+
# res.range_length # => 500
|
1791
2283
|
#
|
1792
2284
|
def range_length: () -> (nil | Integer)
|
1793
2285
|
|
@@ -1795,8 +2287,15 @@ module Net
|
|
1795
2287
|
# rdoc-file=lib/net/http/header.rb
|
1796
2288
|
# - content_type()
|
1797
2289
|
# -->
|
1798
|
-
# Returns
|
1799
|
-
# Content-Type
|
2290
|
+
# Returns the [media type](https://en.wikipedia.org/wiki/Media_type) from the
|
2291
|
+
# value of field `'Content-Type'`, or `nil` if no such field exists; see
|
2292
|
+
# [Content-Type response
|
2293
|
+
# header](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-type-
|
2294
|
+
# response-header):
|
2295
|
+
#
|
2296
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
2297
|
+
# res['content-type'] # => "application/json; charset=utf-8"
|
2298
|
+
# res.content_type # => "application/json"
|
1800
2299
|
#
|
1801
2300
|
def content_type: () -> (nil | String)
|
1802
2301
|
|
@@ -1804,8 +2303,15 @@ module Net
|
|
1804
2303
|
# rdoc-file=lib/net/http/header.rb
|
1805
2304
|
# - main_type()
|
1806
2305
|
# -->
|
1807
|
-
# Returns
|
1808
|
-
#
|
2306
|
+
# Returns the leading ('type') part of the [media
|
2307
|
+
# type](https://en.wikipedia.org/wiki/Media_type) from the value of field
|
2308
|
+
# `'Content-Type'`, or `nil` if no such field exists; see [Content-Type response
|
2309
|
+
# header](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-type-
|
2310
|
+
# response-header):
|
2311
|
+
#
|
2312
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
2313
|
+
# res['content-type'] # => "application/json; charset=utf-8"
|
2314
|
+
# res.main_type # => "application"
|
1809
2315
|
#
|
1810
2316
|
def main_type: () -> (nil | String)
|
1811
2317
|
|
@@ -1813,9 +2319,15 @@ module Net
|
|
1813
2319
|
# rdoc-file=lib/net/http/header.rb
|
1814
2320
|
# - sub_type()
|
1815
2321
|
# -->
|
1816
|
-
# Returns
|
1817
|
-
#
|
1818
|
-
#
|
2322
|
+
# Returns the trailing ('subtype') part of the [media
|
2323
|
+
# type](https://en.wikipedia.org/wiki/Media_type) from the value of field
|
2324
|
+
# `'Content-Type'`, or `nil` if no such field exists; see [Content-Type response
|
2325
|
+
# header](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-type-
|
2326
|
+
# response-header):
|
2327
|
+
#
|
2328
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
2329
|
+
# res['content-type'] # => "application/json; charset=utf-8"
|
2330
|
+
# res.sub_type # => "json"
|
1819
2331
|
#
|
1820
2332
|
def sub_type: () -> (nil | String)
|
1821
2333
|
|
@@ -1823,9 +2335,14 @@ module Net
|
|
1823
2335
|
# rdoc-file=lib/net/http/header.rb
|
1824
2336
|
# - type_params()
|
1825
2337
|
# -->
|
1826
|
-
#
|
1827
|
-
#
|
1828
|
-
#
|
2338
|
+
# Returns the trailing ('parameters') part of the value of field
|
2339
|
+
# `'Content-Type'`, or `nil` if no such field exists; see [Content-Type response
|
2340
|
+
# header](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-type-
|
2341
|
+
# response-header):
|
2342
|
+
#
|
2343
|
+
# res = Net::HTTP.get_response(hostname, '/todos/1')
|
2344
|
+
# res['content-type'] # => "application/json; charset=utf-8"
|
2345
|
+
# res.type_params # => {"charset"=>"utf-8"}
|
1829
2346
|
#
|
1830
2347
|
def type_params: () -> Hash[untyped, untyped]
|
1831
2348
|
|
@@ -1833,9 +2350,16 @@ module Net
|
|
1833
2350
|
# rdoc-file=lib/net/http/header.rb
|
1834
2351
|
# - set_content_type(type, params = {})
|
1835
2352
|
# -->
|
1836
|
-
# Sets the
|
1837
|
-
#
|
1838
|
-
#
|
2353
|
+
# Sets the value of field `'Content-Type'`; returns the new value; see
|
2354
|
+
# [Content-Type request
|
2355
|
+
# header](https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#content-type-
|
2356
|
+
# request-header):
|
2357
|
+
#
|
2358
|
+
# req = Net::HTTP::Get.new(uri)
|
2359
|
+
# req.set_content_type('application/json') # => ["application/json"]
|
2360
|
+
#
|
2361
|
+
# Net::HTTPHeader#content_type= is an alias for
|
2362
|
+
# Net::HTTPHeader#set_content_type.
|
1839
2363
|
#
|
1840
2364
|
def set_content_type: (key `type`, ?Hash[untyped, untyped] params) -> void
|
1841
2365
|
|
@@ -1858,10 +2382,13 @@ module Net
|
|
1858
2382
|
# application/x-www-form-urlencoded
|
1859
2383
|
#
|
1860
2384
|
# Example:
|
2385
|
+
#
|
1861
2386
|
# http.form_data = {"q" => "ruby", "lang" => "en"}
|
1862
2387
|
# http.form_data = {"q" => ["ruby", "perl"], "lang" => "en"}
|
1863
2388
|
# http.set_form_data({"q" => "ruby", "lang" => "en"}, ';')
|
1864
2389
|
#
|
2390
|
+
# Net::HTTPHeader#form_data= is an alias for Net::HTTPHeader#set_form_data.
|
2391
|
+
#
|
1865
2392
|
def set_form_data: (Hash[untyped, untyped] params, ?String sep) -> void
|
1866
2393
|
|
1867
2394
|
# <!--
|
@@ -1895,12 +2422,16 @@ module Net
|
|
1895
2422
|
#
|
1896
2423
|
# Each item of params should respond to `each` and yield 2-3 arguments, or an
|
1897
2424
|
# array of 2-3 elements. The arguments yielded should be:
|
1898
|
-
#
|
1899
|
-
#
|
1900
|
-
#
|
1901
|
-
#
|
1902
|
-
#
|
1903
|
-
#
|
2425
|
+
#
|
2426
|
+
# * The name of the field.
|
2427
|
+
# * The value of the field, it should be a String or a File or IO-like.
|
2428
|
+
# * An options hash, supporting the following options (used only for file
|
2429
|
+
# uploads); entries:
|
2430
|
+
#
|
2431
|
+
# * `:filename`: The name of the file to use.
|
2432
|
+
# * `:content_type`: The content type of the uploaded file.
|
2433
|
+
#
|
2434
|
+
#
|
1904
2435
|
#
|
1905
2436
|
# Each item is a file field or a normal field. If `value` is a File object or
|
1906
2437
|
# the `opt` hash has a :filename key, the item is treated as a file field.
|
@@ -1910,6 +2441,7 @@ module Net
|
|
1910
2441
|
# that the server supports HTTP/1.1 before using chunked encoding.
|
1911
2442
|
#
|
1912
2443
|
# Example:
|
2444
|
+
#
|
1913
2445
|
# req.set_form([["q", "ruby"], ["lang", "en"]])
|
1914
2446
|
#
|
1915
2447
|
# req.set_form({"f"=>File.open('/path/to/filename')},
|
@@ -1971,9 +2503,32 @@ module Net
|
|
1971
2503
|
end
|
1972
2504
|
|
1973
2505
|
# <!-- rdoc-file=lib/net/http/request.rb -->
|
1974
|
-
#
|
1975
|
-
# request path
|
1976
|
-
#
|
2506
|
+
# This class is the base class for Net::HTTP request classes; it wraps together
|
2507
|
+
# the request path and the request headers.
|
2508
|
+
#
|
2509
|
+
# The class should not be used directly; instead you should use its subclasses.
|
2510
|
+
#
|
2511
|
+
# Subclasses for HTTP requests:
|
2512
|
+
#
|
2513
|
+
# * Net::HTTP::Get
|
2514
|
+
# * Net::HTTP::Head
|
2515
|
+
# * Net::HTTP::Post
|
2516
|
+
# * Net::HTTP::Put
|
2517
|
+
# * Net::HTTP::Delete
|
2518
|
+
# * Net::HTTP::Options
|
2519
|
+
# * Net::HTTP::Trace
|
2520
|
+
# * Net::HTTP::Patch
|
2521
|
+
#
|
2522
|
+
#
|
2523
|
+
# Subclasses for WebDAV requests:
|
2524
|
+
#
|
2525
|
+
# * Net::HTTP::Propfind
|
2526
|
+
# * Net::HTTP::Proppatch
|
2527
|
+
# * Net::HTTP::Mkcol
|
2528
|
+
# * Net::HTTP::Copy
|
2529
|
+
# * Net::HTTP::Move
|
2530
|
+
# * Net::HTTP::Lock
|
2531
|
+
# * Net::HTTP::Unlock
|
1977
2532
|
#
|
1978
2533
|
class HTTPRequest < HTTPGenericRequest
|
1979
2534
|
# <!--
|
@@ -1991,8 +2546,34 @@ module Net
|
|
1991
2546
|
end
|
1992
2547
|
|
1993
2548
|
# <!-- rdoc-file=lib/net/http/requests.rb -->
|
1994
|
-
#
|
1995
|
-
#
|
2549
|
+
# Class for representing [HTTP method
|
2550
|
+
# GET](https://en.wikipedia.org/w/index.php?title=Hypertext_Transfer_Protocol#GE
|
2551
|
+
# T_method):
|
2552
|
+
#
|
2553
|
+
# require 'net/http'
|
2554
|
+
# uri = URI('http://example.com')
|
2555
|
+
# hostname = uri.hostname # => "example.com"
|
2556
|
+
# req = Net::HTTP::Get.new(uri) # => #<Net::HTTP::Get GET>
|
2557
|
+
# res = Net::HTTP.start(hostname) do |http|
|
2558
|
+
# http.request(req)
|
2559
|
+
# end
|
2560
|
+
#
|
2561
|
+
# Properties:
|
2562
|
+
#
|
2563
|
+
# * Request body: optional.
|
2564
|
+
# * Response body: yes.
|
2565
|
+
# * [Safe](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Safe_meth
|
2566
|
+
# ods): yes.
|
2567
|
+
# * [Idempotent](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Ide
|
2568
|
+
# mpotent_methods): yes.
|
2569
|
+
# * [Cacheable](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Cach
|
2570
|
+
# eable_methods): yes.
|
2571
|
+
#
|
2572
|
+
#
|
2573
|
+
# Related:
|
2574
|
+
#
|
2575
|
+
# * Net::HTTP.get: sends `GET` request, returns response body.
|
2576
|
+
# * Net::HTTP#get: sends `GET` request, returns response object.
|
1996
2577
|
#
|
1997
2578
|
class HTTP::Get < HTTPRequest
|
1998
2579
|
METHOD: String
|
@@ -2003,8 +2584,33 @@ module Net
|
|
2003
2584
|
end
|
2004
2585
|
|
2005
2586
|
# <!-- rdoc-file=lib/net/http/requests.rb -->
|
2006
|
-
#
|
2007
|
-
#
|
2587
|
+
# Class for representing [HTTP method
|
2588
|
+
# HEAD](https://en.wikipedia.org/w/index.php?title=Hypertext_Transfer_Protocol#H
|
2589
|
+
# EAD_method):
|
2590
|
+
#
|
2591
|
+
# require 'net/http'
|
2592
|
+
# uri = URI('http://example.com')
|
2593
|
+
# hostname = uri.hostname # => "example.com"
|
2594
|
+
# req = Net::HTTP::Head.new(uri) # => #<Net::HTTP::Head HEAD>
|
2595
|
+
# res = Net::HTTP.start(hostname) do |http|
|
2596
|
+
# http.request(req)
|
2597
|
+
# end
|
2598
|
+
#
|
2599
|
+
# Properties:
|
2600
|
+
#
|
2601
|
+
# * Request body: optional.
|
2602
|
+
# * Response body: no.
|
2603
|
+
# * [Safe](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Safe_meth
|
2604
|
+
# ods): yes.
|
2605
|
+
# * [Idempotent](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Ide
|
2606
|
+
# mpotent_methods): yes.
|
2607
|
+
# * [Cacheable](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Cach
|
2608
|
+
# eable_methods): yes.
|
2609
|
+
#
|
2610
|
+
#
|
2611
|
+
# Related:
|
2612
|
+
#
|
2613
|
+
# * Net::HTTP#head: sends `HEAD` request, returns response object.
|
2008
2614
|
#
|
2009
2615
|
class HTTP::Head < HTTPRequest
|
2010
2616
|
METHOD: String
|
@@ -2015,8 +2621,37 @@ module Net
|
|
2015
2621
|
end
|
2016
2622
|
|
2017
2623
|
# <!-- rdoc-file=lib/net/http/requests.rb -->
|
2018
|
-
#
|
2019
|
-
#
|
2624
|
+
# Class for representing [HTTP method
|
2625
|
+
# POST](https://en.wikipedia.org/w/index.php?title=Hypertext_Transfer_Protocol#P
|
2626
|
+
# OST_method):
|
2627
|
+
#
|
2628
|
+
# require 'net/http'
|
2629
|
+
# uri = URI('http://example.com')
|
2630
|
+
# hostname = uri.hostname # => "example.com"
|
2631
|
+
# uri.path = '/posts'
|
2632
|
+
# req = Net::HTTP::Post.new(uri) # => #<Net::HTTP::Post POST>
|
2633
|
+
# req.body = '{"title": "foo","body": "bar","userId": 1}'
|
2634
|
+
# req.content_type = 'application/json'
|
2635
|
+
# res = Net::HTTP.start(hostname) do |http|
|
2636
|
+
# http.request(req)
|
2637
|
+
# end
|
2638
|
+
#
|
2639
|
+
# Properties:
|
2640
|
+
#
|
2641
|
+
# * Request body: yes.
|
2642
|
+
# * Response body: yes.
|
2643
|
+
# * [Safe](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Safe_meth
|
2644
|
+
# ods): no.
|
2645
|
+
# * [Idempotent](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Ide
|
2646
|
+
# mpotent_methods): no.
|
2647
|
+
# * [Cacheable](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Cach
|
2648
|
+
# eable_methods): yes.
|
2649
|
+
#
|
2650
|
+
#
|
2651
|
+
# Related:
|
2652
|
+
#
|
2653
|
+
# * Net::HTTP.post: sends `POST` request, returns response object.
|
2654
|
+
# * Net::HTTP#post: sends `POST` request, returns response object.
|
2020
2655
|
#
|
2021
2656
|
class HTTP::Post < HTTPRequest
|
2022
2657
|
METHOD: String
|
@@ -2027,8 +2662,31 @@ module Net
|
|
2027
2662
|
end
|
2028
2663
|
|
2029
2664
|
# <!-- rdoc-file=lib/net/http/requests.rb -->
|
2030
|
-
#
|
2031
|
-
#
|
2665
|
+
# Class for representing [HTTP method
|
2666
|
+
# PUT](https://en.wikipedia.org/w/index.php?title=Hypertext_Transfer_Protocol#PU
|
2667
|
+
# T_method):
|
2668
|
+
#
|
2669
|
+
# require 'net/http'
|
2670
|
+
# uri = URI('http://example.com')
|
2671
|
+
# hostname = uri.hostname # => "example.com"
|
2672
|
+
# uri.path = '/posts'
|
2673
|
+
# req = Net::HTTP::Put.new(uri) # => #<Net::HTTP::Put PUT>
|
2674
|
+
# req.body = '{"title": "foo","body": "bar","userId": 1}'
|
2675
|
+
# req.content_type = 'application/json'
|
2676
|
+
# res = Net::HTTP.start(hostname) do |http|
|
2677
|
+
# http.request(req)
|
2678
|
+
# end
|
2679
|
+
#
|
2680
|
+
# Properties:
|
2681
|
+
#
|
2682
|
+
# * Request body: yes.
|
2683
|
+
# * Response body: yes.
|
2684
|
+
# * [Safe](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Safe_meth
|
2685
|
+
# ods): no.
|
2686
|
+
# * [Idempotent](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Ide
|
2687
|
+
# mpotent_methods): yes.
|
2688
|
+
# * [Cacheable](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Cach
|
2689
|
+
# eable_methods): no.
|
2032
2690
|
#
|
2033
2691
|
class HTTP::Put < HTTPRequest
|
2034
2692
|
METHOD: String
|
@@ -2039,8 +2697,34 @@ module Net
|
|
2039
2697
|
end
|
2040
2698
|
|
2041
2699
|
# <!-- rdoc-file=lib/net/http/requests.rb -->
|
2042
|
-
#
|
2043
|
-
#
|
2700
|
+
# Class for representing [HTTP method
|
2701
|
+
# DELETE](https://en.wikipedia.org/w/index.php?title=Hypertext_Transfer_Protocol
|
2702
|
+
# #DELETE_method):
|
2703
|
+
#
|
2704
|
+
# require 'net/http'
|
2705
|
+
# uri = URI('http://example.com')
|
2706
|
+
# hostname = uri.hostname # => "example.com"
|
2707
|
+
# uri.path = '/posts/1'
|
2708
|
+
# req = Net::HTTP::Delete.new(uri) # => #<Net::HTTP::Delete DELETE>
|
2709
|
+
# res = Net::HTTP.start(hostname) do |http|
|
2710
|
+
# http.request(req)
|
2711
|
+
# end
|
2712
|
+
#
|
2713
|
+
# Properties:
|
2714
|
+
#
|
2715
|
+
# * Request body: optional.
|
2716
|
+
# * Response body: yes.
|
2717
|
+
# * [Safe](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Safe_meth
|
2718
|
+
# ods): no.
|
2719
|
+
# * [Idempotent](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Ide
|
2720
|
+
# mpotent_methods): yes.
|
2721
|
+
# * [Cacheable](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Cach
|
2722
|
+
# eable_methods): no.
|
2723
|
+
#
|
2724
|
+
#
|
2725
|
+
# Related:
|
2726
|
+
#
|
2727
|
+
# * Net::HTTP#delete: sends `DELETE` request, returns response object.
|
2044
2728
|
#
|
2045
2729
|
class HTTP::Delete < HTTPRequest
|
2046
2730
|
METHOD: String
|
@@ -2051,7 +2735,33 @@ module Net
|
|
2051
2735
|
end
|
2052
2736
|
|
2053
2737
|
# <!-- rdoc-file=lib/net/http/requests.rb -->
|
2054
|
-
#
|
2738
|
+
# Class for representing [HTTP method
|
2739
|
+
# OPTIONS](https://en.wikipedia.org/w/index.php?title=Hypertext_Transfer_Protoco
|
2740
|
+
# l#OPTIONS_method):
|
2741
|
+
#
|
2742
|
+
# require 'net/http'
|
2743
|
+
# uri = URI('http://example.com')
|
2744
|
+
# hostname = uri.hostname # => "example.com"
|
2745
|
+
# req = Net::HTTP::Options.new(uri) # => #<Net::HTTP::Options OPTIONS>
|
2746
|
+
# res = Net::HTTP.start(hostname) do |http|
|
2747
|
+
# http.request(req)
|
2748
|
+
# end
|
2749
|
+
#
|
2750
|
+
# Properties:
|
2751
|
+
#
|
2752
|
+
# * Request body: optional.
|
2753
|
+
# * Response body: yes.
|
2754
|
+
# * [Safe](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Safe_meth
|
2755
|
+
# ods): yes.
|
2756
|
+
# * [Idempotent](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Ide
|
2757
|
+
# mpotent_methods): yes.
|
2758
|
+
# * [Cacheable](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Cach
|
2759
|
+
# eable_methods): no.
|
2760
|
+
#
|
2761
|
+
#
|
2762
|
+
# Related:
|
2763
|
+
#
|
2764
|
+
# * Net::HTTP#options: sends `OPTIONS` request, returns response object.
|
2055
2765
|
#
|
2056
2766
|
class HTTP::Options < HTTPRequest
|
2057
2767
|
METHOD: String
|
@@ -2062,7 +2772,33 @@ module Net
|
|
2062
2772
|
end
|
2063
2773
|
|
2064
2774
|
# <!-- rdoc-file=lib/net/http/requests.rb -->
|
2065
|
-
#
|
2775
|
+
# Class for representing [HTTP method
|
2776
|
+
# TRACE](https://en.wikipedia.org/w/index.php?title=Hypertext_Transfer_Protocol#
|
2777
|
+
# TRACE_method):
|
2778
|
+
#
|
2779
|
+
# require 'net/http'
|
2780
|
+
# uri = URI('http://example.com')
|
2781
|
+
# hostname = uri.hostname # => "example.com"
|
2782
|
+
# req = Net::HTTP::Trace.new(uri) # => #<Net::HTTP::Trace TRACE>
|
2783
|
+
# res = Net::HTTP.start(hostname) do |http|
|
2784
|
+
# http.request(req)
|
2785
|
+
# end
|
2786
|
+
#
|
2787
|
+
# Properties:
|
2788
|
+
#
|
2789
|
+
# * Request body: no.
|
2790
|
+
# * Response body: yes.
|
2791
|
+
# * [Safe](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Safe_meth
|
2792
|
+
# ods): yes.
|
2793
|
+
# * [Idempotent](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Ide
|
2794
|
+
# mpotent_methods): yes.
|
2795
|
+
# * [Cacheable](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Cach
|
2796
|
+
# eable_methods): no.
|
2797
|
+
#
|
2798
|
+
#
|
2799
|
+
# Related:
|
2800
|
+
#
|
2801
|
+
# * Net::HTTP#trace: sends `TRACE` request, returns response object.
|
2066
2802
|
#
|
2067
2803
|
class HTTP::Trace < HTTPRequest
|
2068
2804
|
METHOD: String
|
@@ -2073,7 +2809,36 @@ module Net
|
|
2073
2809
|
end
|
2074
2810
|
|
2075
2811
|
# <!-- rdoc-file=lib/net/http/requests.rb -->
|
2076
|
-
#
|
2812
|
+
# Class for representing [HTTP method
|
2813
|
+
# PATCH](https://en.wikipedia.org/w/index.php?title=Hypertext_Transfer_Protocol#
|
2814
|
+
# PATCH_method):
|
2815
|
+
#
|
2816
|
+
# require 'net/http'
|
2817
|
+
# uri = URI('http://example.com')
|
2818
|
+
# hostname = uri.hostname # => "example.com"
|
2819
|
+
# uri.path = '/posts'
|
2820
|
+
# req = Net::HTTP::Patch.new(uri) # => #<Net::HTTP::Patch PATCH>
|
2821
|
+
# req.body = '{"title": "foo","body": "bar","userId": 1}'
|
2822
|
+
# req.content_type = 'application/json'
|
2823
|
+
# res = Net::HTTP.start(hostname) do |http|
|
2824
|
+
# http.request(req)
|
2825
|
+
# end
|
2826
|
+
#
|
2827
|
+
# Properties:
|
2828
|
+
#
|
2829
|
+
# * Request body: yes.
|
2830
|
+
# * Response body: yes.
|
2831
|
+
# * [Safe](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Safe_meth
|
2832
|
+
# ods): no.
|
2833
|
+
# * [Idempotent](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Ide
|
2834
|
+
# mpotent_methods): no.
|
2835
|
+
# * [Cacheable](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Cach
|
2836
|
+
# eable_methods): no.
|
2837
|
+
#
|
2838
|
+
#
|
2839
|
+
# Related:
|
2840
|
+
#
|
2841
|
+
# * Net::HTTP#patch: sends `PATCH` request, returns response object.
|
2077
2842
|
#
|
2078
2843
|
class HTTP::Patch < HTTPRequest
|
2079
2844
|
METHOD: String
|
@@ -2084,7 +2849,20 @@ module Net
|
|
2084
2849
|
end
|
2085
2850
|
|
2086
2851
|
# <!-- rdoc-file=lib/net/http/requests.rb -->
|
2087
|
-
#
|
2852
|
+
# Class for representing [WebDAV method
|
2853
|
+
# PROPFIND](http://www.webdav.org/specs/rfc4918.html#METHOD_PROPFIND):
|
2854
|
+
#
|
2855
|
+
# require 'net/http'
|
2856
|
+
# uri = URI('http://example.com')
|
2857
|
+
# hostname = uri.hostname # => "example.com"
|
2858
|
+
# req = Net::HTTP::Propfind.new(uri) # => #<Net::HTTP::Propfind PROPFIND>
|
2859
|
+
# res = Net::HTTP.start(hostname) do |http|
|
2860
|
+
# http.request(req)
|
2861
|
+
# end
|
2862
|
+
#
|
2863
|
+
# Related:
|
2864
|
+
#
|
2865
|
+
# * Net::HTTP#propfind: sends `PROPFIND` request, returns response object.
|
2088
2866
|
#
|
2089
2867
|
class HTTP::Propfind < HTTPRequest
|
2090
2868
|
METHOD: String
|
@@ -2095,7 +2873,20 @@ module Net
|
|
2095
2873
|
end
|
2096
2874
|
|
2097
2875
|
# <!-- rdoc-file=lib/net/http/requests.rb -->
|
2098
|
-
#
|
2876
|
+
# Class for representing [WebDAV method
|
2877
|
+
# PROPPATCH](http://www.webdav.org/specs/rfc4918.html#METHOD_PROPPATCH):
|
2878
|
+
#
|
2879
|
+
# require 'net/http'
|
2880
|
+
# uri = URI('http://example.com')
|
2881
|
+
# hostname = uri.hostname # => "example.com"
|
2882
|
+
# req = Net::HTTP::Proppatch.new(uri) # => #<Net::HTTP::Proppatch PROPPATCH>
|
2883
|
+
# res = Net::HTTP.start(hostname) do |http|
|
2884
|
+
# http.request(req)
|
2885
|
+
# end
|
2886
|
+
#
|
2887
|
+
# Related:
|
2888
|
+
#
|
2889
|
+
# * Net::HTTP#proppatch: sends `PROPPATCH` request, returns response object.
|
2099
2890
|
#
|
2100
2891
|
class HTTP::Proppatch < HTTPRequest
|
2101
2892
|
METHOD: String
|
@@ -2106,7 +2897,20 @@ module Net
|
|
2106
2897
|
end
|
2107
2898
|
|
2108
2899
|
# <!-- rdoc-file=lib/net/http/requests.rb -->
|
2109
|
-
#
|
2900
|
+
# Class for representing [WebDAV method
|
2901
|
+
# MKCOL](http://www.webdav.org/specs/rfc4918.html#METHOD_MKCOL):
|
2902
|
+
#
|
2903
|
+
# require 'net/http'
|
2904
|
+
# uri = URI('http://example.com')
|
2905
|
+
# hostname = uri.hostname # => "example.com"
|
2906
|
+
# req = Net::HTTP::Mkcol.new(uri) # => #<Net::HTTP::Mkcol MKCOL>
|
2907
|
+
# res = Net::HTTP.start(hostname) do |http|
|
2908
|
+
# http.request(req)
|
2909
|
+
# end
|
2910
|
+
#
|
2911
|
+
# Related:
|
2912
|
+
#
|
2913
|
+
# * Net::HTTP#mkcol: sends `MKCOL` request, returns response object.
|
2110
2914
|
#
|
2111
2915
|
class HTTP::Mkcol < HTTPRequest
|
2112
2916
|
METHOD: String
|
@@ -2117,7 +2921,20 @@ module Net
|
|
2117
2921
|
end
|
2118
2922
|
|
2119
2923
|
# <!-- rdoc-file=lib/net/http/requests.rb -->
|
2120
|
-
#
|
2924
|
+
# Class for representing [WebDAV method
|
2925
|
+
# COPY](http://www.webdav.org/specs/rfc4918.html#METHOD_COPY):
|
2926
|
+
#
|
2927
|
+
# require 'net/http'
|
2928
|
+
# uri = URI('http://example.com')
|
2929
|
+
# hostname = uri.hostname # => "example.com"
|
2930
|
+
# req = Net::HTTP::Copy.new(uri) # => #<Net::HTTP::Copy COPY>
|
2931
|
+
# res = Net::HTTP.start(hostname) do |http|
|
2932
|
+
# http.request(req)
|
2933
|
+
# end
|
2934
|
+
#
|
2935
|
+
# Related:
|
2936
|
+
#
|
2937
|
+
# * Net::HTTP#copy: sends `COPY` request, returns response object.
|
2121
2938
|
#
|
2122
2939
|
class HTTP::Copy < HTTPRequest
|
2123
2940
|
METHOD: String
|
@@ -2128,7 +2945,20 @@ module Net
|
|
2128
2945
|
end
|
2129
2946
|
|
2130
2947
|
# <!-- rdoc-file=lib/net/http/requests.rb -->
|
2131
|
-
#
|
2948
|
+
# Class for representing [WebDAV method
|
2949
|
+
# MOVE](http://www.webdav.org/specs/rfc4918.html#METHOD_MOVE):
|
2950
|
+
#
|
2951
|
+
# require 'net/http'
|
2952
|
+
# uri = URI('http://example.com')
|
2953
|
+
# hostname = uri.hostname # => "example.com"
|
2954
|
+
# req = Net::HTTP::Move.new(uri) # => #<Net::HTTP::Move MOVE>
|
2955
|
+
# res = Net::HTTP.start(hostname) do |http|
|
2956
|
+
# http.request(req)
|
2957
|
+
# end
|
2958
|
+
#
|
2959
|
+
# Related:
|
2960
|
+
#
|
2961
|
+
# * Net::HTTP#move: sends `MOVE` request, returns response object.
|
2132
2962
|
#
|
2133
2963
|
class HTTP::Move < HTTPRequest
|
2134
2964
|
METHOD: String
|
@@ -2139,7 +2969,20 @@ module Net
|
|
2139
2969
|
end
|
2140
2970
|
|
2141
2971
|
# <!-- rdoc-file=lib/net/http/requests.rb -->
|
2142
|
-
#
|
2972
|
+
# Class for representing [WebDAV method
|
2973
|
+
# LOCK](http://www.webdav.org/specs/rfc4918.html#METHOD_LOCK):
|
2974
|
+
#
|
2975
|
+
# require 'net/http'
|
2976
|
+
# uri = URI('http://example.com')
|
2977
|
+
# hostname = uri.hostname # => "example.com"
|
2978
|
+
# req = Net::HTTP::Lock.new(uri) # => #<Net::HTTP::Lock LOCK>
|
2979
|
+
# res = Net::HTTP.start(hostname) do |http|
|
2980
|
+
# http.request(req)
|
2981
|
+
# end
|
2982
|
+
#
|
2983
|
+
# Related:
|
2984
|
+
#
|
2985
|
+
# * Net::HTTP#lock: sends `LOCK` request, returns response object.
|
2143
2986
|
#
|
2144
2987
|
class HTTP::Lock < HTTPRequest
|
2145
2988
|
METHOD: String
|
@@ -2150,7 +2993,20 @@ module Net
|
|
2150
2993
|
end
|
2151
2994
|
|
2152
2995
|
# <!-- rdoc-file=lib/net/http/requests.rb -->
|
2153
|
-
#
|
2996
|
+
# Class for representing [WebDAV method
|
2997
|
+
# UNLOCK](http://www.webdav.org/specs/rfc4918.html#METHOD_UNLOCK):
|
2998
|
+
#
|
2999
|
+
# require 'net/http'
|
3000
|
+
# uri = URI('http://example.com')
|
3001
|
+
# hostname = uri.hostname # => "example.com"
|
3002
|
+
# req = Net::HTTP::Unlock.new(uri) # => #<Net::HTTP::Unlock UNLOCK>
|
3003
|
+
# res = Net::HTTP.start(hostname) do |http|
|
3004
|
+
# http.request(req)
|
3005
|
+
# end
|
3006
|
+
#
|
3007
|
+
# Related:
|
3008
|
+
#
|
3009
|
+
# * Net::HTTP#unlock: sends `UNLOCK` request, returns response object.
|
2154
3010
|
#
|
2155
3011
|
class HTTP::Unlock < HTTPRequest
|
2156
3012
|
METHOD: String
|
@@ -2161,21 +3017,175 @@ module Net
|
|
2161
3017
|
end
|
2162
3018
|
|
2163
3019
|
# <!-- rdoc-file=lib/net/http/response.rb -->
|
2164
|
-
# HTTP
|
3020
|
+
# This class is the base class for Net::HTTP request classes.
|
3021
|
+
#
|
3022
|
+
# ## About the Examples
|
3023
|
+
#
|
3024
|
+
# Examples here assume that `net/http` has been required (which also requires
|
3025
|
+
# `uri`):
|
3026
|
+
#
|
3027
|
+
# require 'net/http'
|
3028
|
+
#
|
3029
|
+
# Many code examples here use these example websites:
|
3030
|
+
#
|
3031
|
+
# * https://jsonplaceholder.typicode.com.
|
3032
|
+
# * http://example.com.
|
3033
|
+
#
|
3034
|
+
#
|
3035
|
+
# Some examples also assume these variables:
|
3036
|
+
#
|
3037
|
+
# uri = URI('https://jsonplaceholder.typicode.com')
|
3038
|
+
# uri.freeze # Examples may not modify.
|
3039
|
+
# hostname = uri.hostname # => "jsonplaceholder.typicode.com"
|
3040
|
+
# port = uri.port # => 443
|
3041
|
+
#
|
3042
|
+
# So that example requests may be written as:
|
3043
|
+
#
|
3044
|
+
# Net::HTTP.get(uri)
|
3045
|
+
# Net::HTTP.get(hostname, '/index.html')
|
3046
|
+
# Net::HTTP.start(hostname) do |http|
|
3047
|
+
# http.get('/todos/1')
|
3048
|
+
# http.get('/todos/2')
|
3049
|
+
# end
|
3050
|
+
#
|
3051
|
+
# An example that needs a modified URI first duplicates `uri`, then modifies the
|
3052
|
+
# duplicate:
|
3053
|
+
#
|
3054
|
+
# _uri = uri.dup
|
3055
|
+
# _uri.path = '/todos/1'
|
3056
|
+
#
|
3057
|
+
# ## Returned Responses
|
3058
|
+
#
|
3059
|
+
# Method Net::HTTP.get_response returns an instance of one of the subclasses of
|
3060
|
+
# Net::HTTPResponse:
|
3061
|
+
#
|
3062
|
+
# Net::HTTP.get_response(uri)
|
3063
|
+
# # => #<Net::HTTPOK 200 OK readbody=true>
|
3064
|
+
# Net::HTTP.get_response(hostname, '/nosuch')
|
3065
|
+
# # => #<Net::HTTPNotFound 404 Not Found readbody=true>
|
3066
|
+
#
|
3067
|
+
# As does method Net::HTTP#request:
|
3068
|
+
#
|
3069
|
+
# req = Net::HTTP::Get.new(uri)
|
3070
|
+
# Net::HTTP.start(hostname) do |http|
|
3071
|
+
# http.request(req)
|
3072
|
+
# end # => #<Net::HTTPOK 200 OK readbody=true>
|
3073
|
+
#
|
3074
|
+
# Class Net::HTTPResponse includes module Net::HTTPHeader, which provides access
|
3075
|
+
# to response header values via (among others):
|
3076
|
+
#
|
3077
|
+
# * Hash-like method `[]`.
|
3078
|
+
# * Specific reader methods, such as `content_type`.
|
3079
|
+
#
|
3080
|
+
#
|
3081
|
+
# Examples:
|
3082
|
+
#
|
3083
|
+
# res = Net::HTTP.get_response(uri) # => #<Net::HTTPOK 200 OK readbody=true>
|
3084
|
+
# res['Content-Type'] # => "text/html; charset=UTF-8"
|
3085
|
+
# res.content_type # => "text/html"
|
2165
3086
|
#
|
2166
|
-
#
|
2167
|
-
# entity requested).
|
3087
|
+
# ## Response Subclasses
|
2168
3088
|
#
|
2169
|
-
#
|
2170
|
-
#
|
3089
|
+
# Class Net::HTTPResponse has a subclass for each [HTTP status
|
3090
|
+
# code](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes). You can look
|
3091
|
+
# up the response class for a given code:
|
2171
3092
|
#
|
2172
|
-
#
|
2173
|
-
#
|
2174
|
-
#
|
3093
|
+
# Net::HTTPResponse::CODE_TO_OBJ['200'] # => Net::HTTPOK
|
3094
|
+
# Net::HTTPResponse::CODE_TO_OBJ['400'] # => Net::HTTPBadRequest
|
3095
|
+
# Net::HTTPResponse::CODE_TO_OBJ['404'] # => Net::HTTPNotFound
|
2175
3096
|
#
|
2176
|
-
#
|
3097
|
+
# And you can retrieve the status code for a response object:
|
2177
3098
|
#
|
2178
|
-
# Net::
|
3099
|
+
# Net::HTTP.get_response(uri).code # => "200"
|
3100
|
+
# Net::HTTP.get_response(hostname, '/nosuch').code # => "404"
|
3101
|
+
#
|
3102
|
+
# The response subclasses (indentation shows class hierarchy):
|
3103
|
+
#
|
3104
|
+
# * Net::HTTPUnknownResponse (for unhandled HTTP extensions).
|
3105
|
+
#
|
3106
|
+
# * Net::HTTPInformation:
|
3107
|
+
#
|
3108
|
+
# * Net::HTTPContinue (100)
|
3109
|
+
# * Net::HTTPSwitchProtocol (101)
|
3110
|
+
# * Net::HTTPProcessing (102)
|
3111
|
+
# * Net::HTTPEarlyHints (103)
|
3112
|
+
#
|
3113
|
+
#
|
3114
|
+
# * Net::HTTPSuccess:
|
3115
|
+
#
|
3116
|
+
# * Net::HTTPOK (200)
|
3117
|
+
# * Net::HTTPCreated (201)
|
3118
|
+
# * Net::HTTPAccepted (202)
|
3119
|
+
# * Net::HTTPNonAuthoritativeInformation (203)
|
3120
|
+
# * Net::HTTPNoContent (204)
|
3121
|
+
# * Net::HTTPResetContent (205)
|
3122
|
+
# * Net::HTTPPartialContent (206)
|
3123
|
+
# * Net::HTTPMultiStatus (207)
|
3124
|
+
# * Net::HTTPAlreadyReported (208)
|
3125
|
+
# * Net::HTTPIMUsed (226)
|
3126
|
+
#
|
3127
|
+
#
|
3128
|
+
# * Net::HTTPRedirection:
|
3129
|
+
#
|
3130
|
+
# * Net::HTTPMultipleChoices (300)
|
3131
|
+
# * Net::HTTPMovedPermanently (301)
|
3132
|
+
# * Net::HTTPFound (302)
|
3133
|
+
# * Net::HTTPSeeOther (303)
|
3134
|
+
# * Net::HTTPNotModified (304)
|
3135
|
+
# * Net::HTTPUseProxy (305)
|
3136
|
+
# * Net::HTTPTemporaryRedirect (307)
|
3137
|
+
# * Net::HTTPPermanentRedirect (308)
|
3138
|
+
#
|
3139
|
+
#
|
3140
|
+
# * Net::HTTPClientError:
|
3141
|
+
#
|
3142
|
+
# * Net::HTTPBadRequest (400)
|
3143
|
+
# * Net::HTTPUnauthorized (401)
|
3144
|
+
# * Net::HTTPPaymentRequired (402)
|
3145
|
+
# * Net::HTTPForbidden (403)
|
3146
|
+
# * Net::HTTPNotFound (404)
|
3147
|
+
# * Net::HTTPMethodNotAllowed (405)
|
3148
|
+
# * Net::HTTPNotAcceptable (406)
|
3149
|
+
# * Net::HTTPProxyAuthenticationRequired (407)
|
3150
|
+
# * Net::HTTPRequestTimeOut (408)
|
3151
|
+
# * Net::HTTPConflict (409)
|
3152
|
+
# * Net::HTTPGone (410)
|
3153
|
+
# * Net::HTTPLengthRequired (411)
|
3154
|
+
# * Net::HTTPPreconditionFailed (412)
|
3155
|
+
# * Net::HTTPRequestEntityTooLarge (413)
|
3156
|
+
# * Net::HTTPRequestURITooLong (414)
|
3157
|
+
# * Net::HTTPUnsupportedMediaType (415)
|
3158
|
+
# * Net::HTTPRequestedRangeNotSatisfiable (416)
|
3159
|
+
# * Net::HTTPExpectationFailed (417)
|
3160
|
+
# * Net::HTTPMisdirectedRequest (421)
|
3161
|
+
# * Net::HTTPUnprocessableEntity (422)
|
3162
|
+
# * Net::HTTPLocked (423)
|
3163
|
+
# * Net::HTTPFailedDependency (424)
|
3164
|
+
# * Net::HTTPUpgradeRequired (426)
|
3165
|
+
# * Net::HTTPPreconditionRequired (428)
|
3166
|
+
# * Net::HTTPTooManyRequests (429)
|
3167
|
+
# * Net::HTTPRequestHeaderFieldsTooLarge (431)
|
3168
|
+
# * Net::HTTPUnavailableForLegalReasons (451)
|
3169
|
+
#
|
3170
|
+
#
|
3171
|
+
# * Net::HTTPServerError:
|
3172
|
+
#
|
3173
|
+
# * Net::HTTPInternalServerError (500)
|
3174
|
+
# * Net::HTTPNotImplemented (501)
|
3175
|
+
# * Net::HTTPBadGateway (502)
|
3176
|
+
# * Net::HTTPServiceUnavailable (503)
|
3177
|
+
# * Net::HTTPGatewayTimeOut (504)
|
3178
|
+
# * Net::HTTPVersionNotSupported (505)
|
3179
|
+
# * Net::HTTPVariantAlsoNegotiates (506)
|
3180
|
+
# * Net::HTTPInsufficientStorage (507)
|
3181
|
+
# * Net::HTTPLoopDetected (508)
|
3182
|
+
# * Net::HTTPNotExtended (510)
|
3183
|
+
# * Net::HTTPNetworkAuthenticationRequired (511)
|
3184
|
+
#
|
3185
|
+
#
|
3186
|
+
#
|
3187
|
+
# There is also the Net::HTTPBadResponse exception which is raised when there is
|
3188
|
+
# a protocol error.
|
2179
3189
|
#
|
2180
3190
|
class HTTPResponse
|
2181
3191
|
# <!--
|
@@ -2330,294 +3340,961 @@ module Net
|
|
2330
3340
|
EXCEPTION_TYPE: Net::HTTPError
|
2331
3341
|
end
|
2332
3342
|
|
3343
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3344
|
+
# Parent class for informational (1xx) HTTP response classes.
|
3345
|
+
#
|
3346
|
+
# An informational response indicates that the request was received and
|
3347
|
+
# understood.
|
3348
|
+
#
|
3349
|
+
# References:
|
3350
|
+
#
|
3351
|
+
# * [RFC 9110](https://www.rfc-editor.org/rfc/rfc9110.html#status.1xx).
|
3352
|
+
# * [Wikipedia](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#1xx_in
|
3353
|
+
# formational_response).
|
3354
|
+
#
|
2333
3355
|
class HTTPInformation < HTTPResponse
|
2334
3356
|
HAS_BODY: bool
|
2335
3357
|
|
2336
3358
|
EXCEPTION_TYPE: Net::HTTPError
|
2337
3359
|
end
|
2338
3360
|
|
3361
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3362
|
+
# Parent class for success (2xx) HTTP response classes.
|
3363
|
+
#
|
3364
|
+
# A success response indicates the action requested by the client was received,
|
3365
|
+
# understood, and accepted.
|
3366
|
+
#
|
3367
|
+
# References:
|
3368
|
+
#
|
3369
|
+
# * [RFC 9110](https://www.rfc-editor.org/rfc/rfc9110.html#status.2xx).
|
3370
|
+
# * [Wikipedia](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#2xx_su
|
3371
|
+
# ccess).
|
3372
|
+
#
|
2339
3373
|
class HTTPSuccess < HTTPResponse
|
2340
3374
|
HAS_BODY: bool
|
2341
3375
|
|
2342
3376
|
EXCEPTION_TYPE: Net::HTTPError
|
2343
3377
|
end
|
2344
3378
|
|
3379
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3380
|
+
# Parent class for redirection (3xx) HTTP response classes.
|
3381
|
+
#
|
3382
|
+
# A redirection response indicates the client must take additional action to
|
3383
|
+
# complete the request.
|
3384
|
+
#
|
3385
|
+
# References:
|
3386
|
+
#
|
3387
|
+
# * [RFC 9110](https://www.rfc-editor.org/rfc/rfc9110.html#status.3xx).
|
3388
|
+
# * [Wikipedia](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#3xx_re
|
3389
|
+
# direction).
|
3390
|
+
#
|
2345
3391
|
class HTTPRedirection < HTTPResponse
|
2346
3392
|
HAS_BODY: bool
|
2347
3393
|
|
2348
3394
|
EXCEPTION_TYPE: Net::HTTPRetriableError
|
2349
3395
|
end
|
2350
3396
|
|
3397
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3398
|
+
# Parent class for client error (4xx) HTTP response classes.
|
3399
|
+
#
|
3400
|
+
# A client error response indicates that the client may have caused an error.
|
3401
|
+
#
|
3402
|
+
# References:
|
3403
|
+
#
|
3404
|
+
# * [RFC 9110](https://www.rfc-editor.org/rfc/rfc9110.html#status.4xx).
|
3405
|
+
# * [Wikipedia](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#4xx_cl
|
3406
|
+
# ient_errors).
|
3407
|
+
#
|
2351
3408
|
class HTTPClientError < HTTPResponse
|
2352
3409
|
HAS_BODY: bool
|
2353
3410
|
|
2354
3411
|
EXCEPTION_TYPE: untyped
|
2355
3412
|
end
|
2356
3413
|
|
3414
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3415
|
+
# Parent class for server error (5xx) HTTP response classes.
|
3416
|
+
#
|
3417
|
+
# A server error response indicates that the server failed to fulfill a request.
|
3418
|
+
#
|
3419
|
+
# References:
|
3420
|
+
#
|
3421
|
+
# * [RFC 9110](https://www.rfc-editor.org/rfc/rfc9110.html#status.5xx).
|
3422
|
+
# * [Wikipedia](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#5xx_se
|
3423
|
+
# rver_errors).
|
3424
|
+
#
|
2357
3425
|
class HTTPServerError < HTTPResponse
|
2358
3426
|
HAS_BODY: bool
|
2359
3427
|
|
2360
3428
|
EXCEPTION_TYPE: Net::HTTPFatalError
|
2361
3429
|
end
|
2362
3430
|
|
3431
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3432
|
+
# Response class for `Continue` responses (status code 100).
|
3433
|
+
#
|
3434
|
+
# A `Continue` response indicates that the server has received the request
|
3435
|
+
# headers.
|
3436
|
+
#
|
3437
|
+
# References:
|
3438
|
+
#
|
3439
|
+
# * [Mozilla](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/100).
|
3440
|
+
# * [RFC 9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-100-continue).
|
3441
|
+
# * [Wikipedia](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#100).
|
3442
|
+
#
|
2363
3443
|
class HTTPContinue < HTTPInformation
|
2364
3444
|
HAS_BODY: bool
|
2365
3445
|
end
|
2366
3446
|
|
3447
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3448
|
+
# Response class for `Switching Protocol` responses (status code 101).
|
3449
|
+
#
|
3450
|
+
# The <tt>Switching Protocol<tt> response indicates that the server has received
|
3451
|
+
# a request to switch protocols, and has agreed to do so.
|
3452
|
+
#
|
3453
|
+
# References:
|
3454
|
+
#
|
3455
|
+
# * [Mozilla](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/101).
|
3456
|
+
# * [RFC
|
3457
|
+
# 9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-101-switching-proto
|
3458
|
+
# cols).
|
3459
|
+
# * [Wikipedia](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#101).
|
3460
|
+
#
|
2367
3461
|
class HTTPSwitchProtocol < HTTPInformation
|
2368
3462
|
HAS_BODY: bool
|
2369
3463
|
end
|
2370
3464
|
|
3465
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3466
|
+
# Response class for `Processing` responses (status code 102).
|
3467
|
+
#
|
3468
|
+
# The `Processing` response indicates that the server has received and is
|
3469
|
+
# processing the request, but no response is available yet.
|
3470
|
+
#
|
3471
|
+
# References:
|
3472
|
+
#
|
3473
|
+
# * [Wikipedia](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#102).
|
3474
|
+
#
|
2371
3475
|
class HTTPProcessing < HTTPInformation
|
2372
3476
|
HAS_BODY: bool
|
2373
3477
|
end
|
2374
3478
|
|
3479
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3480
|
+
# Response class for `Early Hints` responses (status code 103).
|
3481
|
+
#
|
3482
|
+
# The `Early Hints` indicates that the server has received and is processing the
|
3483
|
+
# request, and contains certain headers; the final response is not available
|
3484
|
+
# yet.
|
3485
|
+
#
|
3486
|
+
# References:
|
3487
|
+
#
|
3488
|
+
# * [Mozilla](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/103).
|
3489
|
+
# * [Wikipedia](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#103).
|
3490
|
+
#
|
2375
3491
|
class HTTPEarlyHints < HTTPInformation
|
2376
3492
|
HAS_BODY: bool
|
2377
3493
|
end
|
2378
3494
|
|
3495
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3496
|
+
# Response class for `OK` responses (status code 200).
|
3497
|
+
#
|
3498
|
+
# The `OK` response indicates that the server has received a request and has
|
3499
|
+
# responded successfully. See [200
|
3500
|
+
# OK](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#200).
|
3501
|
+
#
|
2379
3502
|
class HTTPOK < HTTPSuccess
|
2380
3503
|
HAS_BODY: bool
|
2381
3504
|
end
|
2382
3505
|
|
3506
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3507
|
+
# Response class for `Created` responses (status code 201).
|
3508
|
+
#
|
3509
|
+
# The `Created` response indicates that the server has received and has
|
3510
|
+
# fulfilled a request to create a new resource. See [201
|
3511
|
+
# Created](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#201).
|
3512
|
+
#
|
2383
3513
|
class HTTPCreated < HTTPSuccess
|
2384
3514
|
HAS_BODY: bool
|
2385
3515
|
end
|
2386
3516
|
|
3517
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3518
|
+
# Response class for `Accepted` responses (status code 202).
|
3519
|
+
#
|
3520
|
+
# The `Accepted` response indicates that the server has received and is
|
3521
|
+
# processing a request, but the processing has not yet been completed. See [202
|
3522
|
+
# Accepted](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#202).
|
3523
|
+
#
|
2387
3524
|
class HTTPAccepted < HTTPSuccess
|
2388
3525
|
HAS_BODY: bool
|
2389
3526
|
end
|
2390
3527
|
|
3528
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3529
|
+
# Response class for `Non-Authoritative Information` responses (status code
|
3530
|
+
# 203).
|
3531
|
+
#
|
3532
|
+
# The `Non-Authoritative Information` response indicates that the server is a
|
3533
|
+
# transforming proxy (such as a Web accelerator) that received a 200 OK response
|
3534
|
+
# from its origin, and is returning a modified version of the origin's response.
|
3535
|
+
# See [203 Non-Authoritative
|
3536
|
+
# Information](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#203).
|
3537
|
+
#
|
2391
3538
|
class HTTPNonAuthoritativeInformation < HTTPSuccess
|
2392
3539
|
HAS_BODY: bool
|
2393
3540
|
end
|
2394
3541
|
|
3542
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3543
|
+
# Response class for `No Content` responses (status code 204).
|
3544
|
+
#
|
3545
|
+
# The `No Content` response indicates that the server successfully processed the
|
3546
|
+
# request, and is not returning any content. See [204 No
|
3547
|
+
# Content](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#204).
|
3548
|
+
#
|
2395
3549
|
class HTTPNoContent < HTTPSuccess
|
2396
3550
|
HAS_BODY: bool
|
2397
3551
|
end
|
2398
3552
|
|
3553
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3554
|
+
# Response class for `Reset Content` responses (status code 205).
|
3555
|
+
#
|
3556
|
+
# The `Reset Content` response indicates that the server successfully processed
|
3557
|
+
# the request, asks that the client reset its document view, and is not
|
3558
|
+
# returning any content. See [205 Reset
|
3559
|
+
# Content](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#205).
|
3560
|
+
#
|
2399
3561
|
class HTTPResetContent < HTTPSuccess
|
2400
3562
|
HAS_BODY: bool
|
2401
3563
|
end
|
2402
3564
|
|
3565
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3566
|
+
# Response class for `Partial Content` responses (status code 206).
|
3567
|
+
#
|
3568
|
+
# The `Partial Content` response indicates that the server is delivering only
|
3569
|
+
# part of the resource (byte serving) due to a Range header in the request. See
|
3570
|
+
# [206 Partial
|
3571
|
+
# Content](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#206).
|
3572
|
+
#
|
2403
3573
|
class HTTPPartialContent < HTTPSuccess
|
2404
3574
|
HAS_BODY: bool
|
2405
3575
|
end
|
2406
3576
|
|
3577
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3578
|
+
# Response class for `Multi-Status (WebDAV)` responses (status code 207).
|
3579
|
+
#
|
3580
|
+
# The `Multi-Status (WebDAV)` response indicates that the server has received
|
3581
|
+
# the request, and that the message body can contain a number of separate
|
3582
|
+
# response codes. See [207 Multi-Status
|
3583
|
+
# (WebDAV)](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#207).
|
3584
|
+
#
|
2407
3585
|
class HTTPMultiStatus < HTTPSuccess
|
2408
3586
|
HAS_BODY: bool
|
2409
3587
|
end
|
2410
3588
|
|
3589
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3590
|
+
# Response class for `Already Reported (WebDAV)` responses (status code 208).
|
3591
|
+
#
|
3592
|
+
# The `Already Reported (WebDAV)` response indicates that the server has
|
3593
|
+
# received the request, and that the members of a DAV binding have already been
|
3594
|
+
# enumerated in a preceding part of the (multi-status) response, and are not
|
3595
|
+
# being included again. See [208 Already Reported
|
3596
|
+
# (WebDAV)](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#208).
|
3597
|
+
#
|
2411
3598
|
class HTTPAlreadyReported < HTTPSuccess
|
2412
3599
|
HAS_BODY: bool
|
2413
3600
|
end
|
2414
3601
|
|
3602
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3603
|
+
# Response class for `IM Used` responses (status code 226).
|
3604
|
+
#
|
3605
|
+
# The `IM Used` response indicates that the server has fulfilled a request for
|
3606
|
+
# the resource, and the response is a representation of the result of one or
|
3607
|
+
# more instance-manipulations applied to the current instance. See [226 IM
|
3608
|
+
# Used](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#226).
|
3609
|
+
#
|
2415
3610
|
class HTTPIMUsed < HTTPSuccess
|
2416
3611
|
HAS_BODY: bool
|
2417
3612
|
end
|
2418
3613
|
|
3614
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3615
|
+
# Response class for `Multiple Choices` responses (status code 300).
|
3616
|
+
#
|
3617
|
+
# The `Multiple Choices` response indicates that the server offers multiple
|
3618
|
+
# options for the resource from which the client may choose. See [300 Multiple
|
3619
|
+
# Choices](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#300).
|
3620
|
+
#
|
2419
3621
|
class HTTPMultipleChoices < HTTPRedirection
|
2420
3622
|
HAS_BODY: bool
|
2421
3623
|
end
|
2422
3624
|
|
3625
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3626
|
+
# Response class for `Multiple Choices` responses (status code 300).
|
3627
|
+
#
|
3628
|
+
# The `Multiple Choices` response indicates that the server offers multiple
|
3629
|
+
# options for the resource from which the client may choose. See [300 Multiple
|
3630
|
+
# Choices](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#300).
|
3631
|
+
#
|
2423
3632
|
HTTPMultipleChoice: HTTPMultipleChoices
|
2424
3633
|
|
3634
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3635
|
+
# Response class for `Moved Permanently` responses (status code 301).
|
3636
|
+
#
|
3637
|
+
# The `Moved Permanently` response indicates that links or records returning
|
3638
|
+
# this response should be updated to use the given URL. See [301 Moved
|
3639
|
+
# Permanently](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#301).
|
3640
|
+
#
|
2425
3641
|
class HTTPMovedPermanently < HTTPRedirection
|
2426
3642
|
HAS_BODY: bool
|
2427
3643
|
end
|
2428
3644
|
|
3645
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3646
|
+
# Response class for `Found` responses (status code 302).
|
3647
|
+
#
|
3648
|
+
# The `Found` response indicates that the client should look at (browse to)
|
3649
|
+
# another URL. See [302
|
3650
|
+
# Found](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#302).
|
3651
|
+
#
|
2429
3652
|
class HTTPFound < HTTPRedirection
|
2430
3653
|
HAS_BODY: bool
|
2431
3654
|
end
|
2432
3655
|
|
3656
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3657
|
+
# Response class for `See Other` responses (status code 303).
|
3658
|
+
#
|
3659
|
+
# The response to the request can be found under another URI using the GET
|
3660
|
+
# method. See [303 See
|
3661
|
+
# Other](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#303).
|
3662
|
+
#
|
2433
3663
|
class HTTPSeeOther < HTTPRedirection
|
2434
3664
|
HAS_BODY: bool
|
2435
3665
|
end
|
2436
3666
|
|
3667
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3668
|
+
# Response class for `Not Modified` responses (status code 304).
|
3669
|
+
#
|
3670
|
+
# Indicates that the resource has not been modified since the version specified
|
3671
|
+
# by the request headers. See [304 Not
|
3672
|
+
# Modified](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#304).
|
3673
|
+
#
|
2437
3674
|
class HTTPNotModified < HTTPRedirection
|
2438
3675
|
HAS_BODY: bool
|
2439
3676
|
end
|
2440
3677
|
|
3678
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3679
|
+
# Response class for `Use Proxy` responses (status code 305).
|
3680
|
+
#
|
3681
|
+
# The requested resource is available only through a proxy, whose address is
|
3682
|
+
# provided in the response. See [305 Use
|
3683
|
+
# Proxy](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#305).
|
3684
|
+
#
|
2441
3685
|
class HTTPUseProxy < HTTPRedirection
|
2442
3686
|
HAS_BODY: bool
|
2443
3687
|
end
|
2444
3688
|
|
3689
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3690
|
+
# Response class for `Temporary Redirect` responses (status code 307).
|
3691
|
+
#
|
3692
|
+
# The request should be repeated with another URI; however, future requests
|
3693
|
+
# should still use the original URI. See [307 Temporary
|
3694
|
+
# Redirect](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#307).
|
3695
|
+
#
|
2445
3696
|
class HTTPTemporaryRedirect < HTTPRedirection
|
2446
3697
|
HAS_BODY: bool
|
2447
3698
|
end
|
2448
3699
|
|
3700
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3701
|
+
# Response class for `Permanent Redirect` responses (status code 308).
|
3702
|
+
#
|
3703
|
+
# This and all future requests should be directed to the given URI. See [308
|
3704
|
+
# Permanent
|
3705
|
+
# Redirect](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#308).
|
3706
|
+
#
|
2449
3707
|
class HTTPPermanentRedirect < HTTPRedirection
|
2450
3708
|
HAS_BODY: bool
|
2451
3709
|
end
|
2452
3710
|
|
3711
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3712
|
+
# Response class for `Bad Request` responses (status code 400).
|
3713
|
+
#
|
3714
|
+
# The server cannot or will not process the request due to an apparent client
|
3715
|
+
# error. See [400 Bad
|
3716
|
+
# Request](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#400).
|
3717
|
+
#
|
2453
3718
|
class HTTPBadRequest < HTTPClientError
|
2454
3719
|
HAS_BODY: bool
|
2455
3720
|
end
|
2456
3721
|
|
3722
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3723
|
+
# Response class for `Unauthorized` responses (status code 401).
|
3724
|
+
#
|
3725
|
+
# Authentication is required, but either was not provided or failed. See [401
|
3726
|
+
# Unauthorized](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#401).
|
3727
|
+
#
|
2457
3728
|
class HTTPUnauthorized < HTTPClientError
|
2458
3729
|
HAS_BODY: bool
|
2459
3730
|
end
|
2460
3731
|
|
3732
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3733
|
+
# Response class for `Payment Required` responses (status code 402).
|
3734
|
+
#
|
3735
|
+
# Reserved for future use. See [402 Payment
|
3736
|
+
# Required](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#402).
|
3737
|
+
#
|
2461
3738
|
class HTTPPaymentRequired < HTTPClientError
|
2462
3739
|
HAS_BODY: bool
|
2463
3740
|
end
|
2464
3741
|
|
3742
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3743
|
+
# Response class for `Forbidden` responses (status code 403).
|
3744
|
+
#
|
3745
|
+
# The request contained valid data and was understood by the server, but the
|
3746
|
+
# server is refusing action. See [403
|
3747
|
+
# Forbidden](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#403).
|
3748
|
+
#
|
2465
3749
|
class HTTPForbidden < HTTPClientError
|
2466
3750
|
HAS_BODY: bool
|
2467
3751
|
end
|
2468
3752
|
|
3753
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3754
|
+
# Response class for `Not Found` responses (status code 404).
|
3755
|
+
#
|
3756
|
+
# The requested resource could not be found but may be available in the future.
|
3757
|
+
# See [404 Not
|
3758
|
+
# Found](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#404).
|
3759
|
+
#
|
2469
3760
|
class HTTPNotFound < HTTPClientError
|
2470
3761
|
HAS_BODY: bool
|
2471
3762
|
end
|
2472
3763
|
|
3764
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3765
|
+
# Response class for `Method Not Allowed` responses (status code 405).
|
3766
|
+
#
|
3767
|
+
# The request method is not supported for the requested resource. See [405
|
3768
|
+
# Method Not
|
3769
|
+
# Allowed](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#405).
|
3770
|
+
#
|
2473
3771
|
class HTTPMethodNotAllowed < HTTPClientError
|
2474
3772
|
HAS_BODY: bool
|
2475
3773
|
end
|
2476
3774
|
|
3775
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3776
|
+
# Response class for `Not Acceptable` responses (status code 406).
|
3777
|
+
#
|
3778
|
+
# The requested resource is capable of generating only content that not
|
3779
|
+
# acceptable according to the Accept headers sent in the request. See [406 Not
|
3780
|
+
# Acceptable](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#406).
|
3781
|
+
#
|
2477
3782
|
class HTTPNotAcceptable < HTTPClientError
|
2478
3783
|
HAS_BODY: bool
|
2479
3784
|
end
|
2480
3785
|
|
3786
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3787
|
+
# Response class for `Proxy Authentication Required` responses (status code
|
3788
|
+
# 407).
|
3789
|
+
#
|
3790
|
+
# The client must first authenticate itself with the proxy. See [407 Proxy
|
3791
|
+
# Authentication
|
3792
|
+
# Required](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#407).
|
3793
|
+
#
|
2481
3794
|
class HTTPProxyAuthenticationRequired < HTTPClientError
|
2482
3795
|
HAS_BODY: bool
|
2483
3796
|
end
|
2484
3797
|
|
3798
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3799
|
+
# Response class for `Request Timeout` responses (status code 408).
|
3800
|
+
#
|
3801
|
+
# The server timed out waiting for the request. See [408 Request
|
3802
|
+
# Timeout](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#408).
|
3803
|
+
#
|
2485
3804
|
class HTTPRequestTimeout < HTTPClientError
|
2486
3805
|
HAS_BODY: bool
|
2487
3806
|
end
|
2488
3807
|
|
3808
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3809
|
+
# Response class for `Conflict` responses (status code 409).
|
3810
|
+
#
|
3811
|
+
# The request could not be processed because of conflict in the current state of
|
3812
|
+
# the resource. See [409
|
3813
|
+
# Conflict](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#409).
|
3814
|
+
#
|
2489
3815
|
class HTTPConflict < HTTPClientError
|
2490
3816
|
HAS_BODY: bool
|
2491
3817
|
end
|
2492
3818
|
|
3819
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3820
|
+
# Response class for `Gone` responses (status code 410).
|
3821
|
+
#
|
3822
|
+
# The resource requested was previously in use but is no longer available and
|
3823
|
+
# will not be available again. See [410
|
3824
|
+
# Gone](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#410).
|
3825
|
+
#
|
2493
3826
|
class HTTPGone < HTTPClientError
|
2494
3827
|
HAS_BODY: bool
|
2495
3828
|
end
|
2496
3829
|
|
3830
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3831
|
+
# Response class for `Length Required` responses (status code 411).
|
3832
|
+
#
|
3833
|
+
# The request did not specify the length of its content, which is required by
|
3834
|
+
# the requested resource. See [411 Length
|
3835
|
+
# Required](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#411).
|
3836
|
+
#
|
2497
3837
|
class HTTPLengthRequired < HTTPClientError
|
2498
3838
|
HAS_BODY: bool
|
2499
3839
|
end
|
2500
3840
|
|
3841
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3842
|
+
# Response class for `Precondition Failed` responses (status code 412).
|
3843
|
+
#
|
3844
|
+
# The server does not meet one of the preconditions specified in the request
|
3845
|
+
# headers. See [412 Precondition
|
3846
|
+
# Failed](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#412).
|
3847
|
+
#
|
2501
3848
|
class HTTPPreconditionFailed < HTTPClientError
|
2502
3849
|
HAS_BODY: bool
|
2503
3850
|
end
|
2504
3851
|
|
3852
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3853
|
+
# Response class for `Payload Too Large` responses (status code 413).
|
3854
|
+
#
|
3855
|
+
# The request is larger than the server is willing or able to process. See [413
|
3856
|
+
# Payload Too
|
3857
|
+
# Large](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#413).
|
3858
|
+
#
|
2505
3859
|
class HTTPPayloadTooLarge < HTTPClientError
|
2506
3860
|
HAS_BODY: bool
|
2507
3861
|
end
|
2508
3862
|
|
3863
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3864
|
+
# Response class for `URI Too Long` responses (status code 414).
|
3865
|
+
#
|
3866
|
+
# The URI provided was too long for the server to process. See [414 URI Too
|
3867
|
+
# Long](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#414).
|
3868
|
+
#
|
2509
3869
|
class HTTPURITooLong < HTTPClientError
|
2510
3870
|
HAS_BODY: bool
|
2511
3871
|
end
|
2512
3872
|
|
3873
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3874
|
+
# Response class for `Unsupported Media Type` responses (status code 415).
|
3875
|
+
#
|
3876
|
+
# The request entity has a media type which the server or resource does not
|
3877
|
+
# support. See [415 Unsupported Media
|
3878
|
+
# Type](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#415).
|
3879
|
+
#
|
2513
3880
|
class HTTPUnsupportedMediaType < HTTPClientError
|
2514
3881
|
HAS_BODY: bool
|
2515
3882
|
end
|
2516
3883
|
|
3884
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3885
|
+
# Response class for `Range Not Satisfiable` responses (status code 416).
|
3886
|
+
#
|
3887
|
+
# The request entity has a media type which the server or resource does not
|
3888
|
+
# support. See [416 Range Not
|
3889
|
+
# Satisfiable](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#416).
|
3890
|
+
#
|
2517
3891
|
class HTTPRangeNotSatisfiable < HTTPClientError
|
2518
3892
|
HAS_BODY: bool
|
2519
3893
|
end
|
2520
3894
|
|
3895
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3896
|
+
# Response class for `Expectation Failed` responses (status code 417).
|
3897
|
+
#
|
3898
|
+
# The server cannot meet the requirements of the Expect request-header field.
|
3899
|
+
# See [417 Expectation
|
3900
|
+
# Failed](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#417).
|
3901
|
+
#
|
2521
3902
|
class HTTPExpectationFailed < HTTPClientError
|
2522
3903
|
HAS_BODY: bool
|
2523
3904
|
end
|
2524
3905
|
|
3906
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3907
|
+
# Response class for `Misdirected Request` responses (status code 421).
|
3908
|
+
#
|
3909
|
+
# The request was directed at a server that is not able to produce a response.
|
3910
|
+
# See [421 Misdirected
|
3911
|
+
# Request](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#421).
|
3912
|
+
#
|
2525
3913
|
class HTTPMisdirectedRequest < HTTPClientError
|
2526
3914
|
HAS_BODY: bool
|
2527
3915
|
end
|
2528
3916
|
|
3917
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3918
|
+
# Response class for `Unprocessable Entity` responses (status code 422).
|
3919
|
+
#
|
3920
|
+
# The request was well-formed but had semantic errors. See [422 Unprocessable
|
3921
|
+
# Entity](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#422).
|
3922
|
+
#
|
2529
3923
|
class HTTPUnprocessableEntity < HTTPClientError
|
2530
3924
|
HAS_BODY: bool
|
2531
3925
|
end
|
2532
3926
|
|
3927
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3928
|
+
# Response class for `Locked (WebDAV)` responses (status code 423).
|
3929
|
+
#
|
3930
|
+
# The requested resource is locked. See [423 Locked
|
3931
|
+
# (WebDAV)](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#423).
|
3932
|
+
#
|
2533
3933
|
class HTTPLocked < HTTPClientError
|
2534
3934
|
HAS_BODY: bool
|
2535
3935
|
end
|
2536
3936
|
|
3937
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3938
|
+
# Response class for `Failed Dependency (WebDAV)` responses (status code 424).
|
3939
|
+
#
|
3940
|
+
# The request failed because it depended on another request and that request
|
3941
|
+
# failed. See [424 Failed Dependency
|
3942
|
+
# (WebDAV)](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#424).
|
3943
|
+
#
|
2537
3944
|
class HTTPFailedDependency < HTTPClientError
|
2538
3945
|
HAS_BODY: bool
|
2539
3946
|
end
|
2540
3947
|
|
3948
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3949
|
+
# Response class for `Upgrade Required` responses (status code 426).
|
3950
|
+
#
|
3951
|
+
# The client should switch to the protocol given in the Upgrade header field.
|
3952
|
+
# See [426 Upgrade
|
3953
|
+
# Required](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#426).
|
3954
|
+
#
|
2541
3955
|
class HTTPUpgradeRequired < HTTPClientError
|
2542
3956
|
HAS_BODY: bool
|
2543
3957
|
end
|
2544
3958
|
|
3959
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3960
|
+
# Response class for `Precondition Required` responses (status code 428).
|
3961
|
+
#
|
3962
|
+
# The origin server requires the request to be conditional. See [428
|
3963
|
+
# Precondition
|
3964
|
+
# Required](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#428).
|
3965
|
+
#
|
2545
3966
|
class HTTPPreconditionRequired < HTTPClientError
|
2546
3967
|
HAS_BODY: bool
|
2547
3968
|
end
|
2548
3969
|
|
3970
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3971
|
+
# Response class for `Too Many Requests` responses (status code 429).
|
3972
|
+
#
|
3973
|
+
# The user has sent too many requests in a given amount of time. See [429 Too
|
3974
|
+
# Many Requests](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#429).
|
3975
|
+
#
|
2549
3976
|
class HTTPTooManyRequests < HTTPClientError
|
2550
3977
|
HAS_BODY: bool
|
2551
3978
|
end
|
2552
3979
|
|
3980
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3981
|
+
# Response class for `Request Header Fields Too Large` responses (status code
|
3982
|
+
# 431).
|
3983
|
+
#
|
3984
|
+
# An individual header field is too large, or all the header fields
|
3985
|
+
# collectively, are too large. See [431 Request Header Fields Too
|
3986
|
+
# Large](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#431).
|
3987
|
+
#
|
2553
3988
|
class HTTPRequestHeaderFieldsTooLarge < HTTPClientError
|
2554
3989
|
HAS_BODY: bool
|
2555
3990
|
end
|
2556
3991
|
|
3992
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
3993
|
+
# Response class for `Unavailable For Legal Reasons` responses (status code
|
3994
|
+
# 451).
|
3995
|
+
#
|
3996
|
+
# A server operator has received a legal demand to deny access to a resource or
|
3997
|
+
# to a set of resources that includes the requested resource. See [451
|
3998
|
+
# Unavailable For Legal
|
3999
|
+
# Reasons](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#451).
|
4000
|
+
#
|
2557
4001
|
class HTTPUnavailableForLegalReasons < HTTPClientError
|
2558
4002
|
HAS_BODY: bool
|
2559
4003
|
end
|
2560
4004
|
|
4005
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
4006
|
+
# Response class for `Internal Server Error` responses (status code 500).
|
4007
|
+
#
|
4008
|
+
# An unexpected condition was encountered and no more specific message is
|
4009
|
+
# suitable. See [500 Internal Server
|
4010
|
+
# Error](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#500).
|
4011
|
+
#
|
2561
4012
|
class HTTPInternalServerError < HTTPServerError
|
2562
4013
|
HAS_BODY: bool
|
2563
4014
|
end
|
2564
4015
|
|
4016
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
4017
|
+
# Response class for `Not Implemented` responses (status code 501).
|
4018
|
+
#
|
4019
|
+
# The server either does not recognize the request method, or it lacks the
|
4020
|
+
# ability to fulfil the request. See [501 Not
|
4021
|
+
# Implemented](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#501).
|
4022
|
+
#
|
2565
4023
|
class HTTPNotImplemented < HTTPServerError
|
2566
4024
|
HAS_BODY: bool
|
2567
4025
|
end
|
2568
4026
|
|
4027
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
4028
|
+
# Response class for `Bad Gateway` responses (status code 502).
|
4029
|
+
#
|
4030
|
+
# The server was acting as a gateway or proxy and received an invalid response
|
4031
|
+
# from the upstream server. See [502 Bad
|
4032
|
+
# Gateway](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#502).
|
4033
|
+
#
|
2569
4034
|
class HTTPBadGateway < HTTPServerError
|
2570
4035
|
HAS_BODY: bool
|
2571
4036
|
end
|
2572
4037
|
|
4038
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
4039
|
+
# Response class for `Service Unavailable` responses (status code 503).
|
4040
|
+
#
|
4041
|
+
# The server cannot handle the request (because it is overloaded or down for
|
4042
|
+
# maintenance). See [503 Service
|
4043
|
+
# Unavailable](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#503).
|
4044
|
+
#
|
2573
4045
|
class HTTPServiceUnavailable < HTTPServerError
|
2574
4046
|
HAS_BODY: bool
|
2575
4047
|
end
|
2576
4048
|
|
4049
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
4050
|
+
# Response class for `Gateway Timeout` responses (status code 504).
|
4051
|
+
#
|
4052
|
+
# The server was acting as a gateway or proxy and did not receive a timely
|
4053
|
+
# response from the upstream server. See [504 Gateway
|
4054
|
+
# Timeout](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#504).
|
4055
|
+
#
|
2577
4056
|
class HTTPGatewayTimeout < HTTPServerError
|
2578
4057
|
HAS_BODY: bool
|
2579
4058
|
end
|
2580
4059
|
|
4060
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
4061
|
+
# Response class for `HTTP Version Not Supported` responses (status code 505).
|
4062
|
+
#
|
4063
|
+
# The server does not support the HTTP version used in the request. See [505
|
4064
|
+
# HTTP Version Not
|
4065
|
+
# Supported](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#505).
|
4066
|
+
#
|
2581
4067
|
class HTTPVersionNotSupported < HTTPServerError
|
2582
4068
|
HAS_BODY: bool
|
2583
4069
|
end
|
2584
4070
|
|
4071
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
4072
|
+
# Response class for `Variant Also Negotiates` responses (status code 506).
|
4073
|
+
#
|
4074
|
+
# Transparent content negotiation for the request results in a circular
|
4075
|
+
# reference. See [506 Variant Also
|
4076
|
+
# Negotiates](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#506).
|
4077
|
+
#
|
2585
4078
|
class HTTPVariantAlsoNegotiates < HTTPServerError
|
2586
4079
|
HAS_BODY: bool
|
2587
4080
|
end
|
2588
4081
|
|
4082
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
4083
|
+
# Response class for `Insufficient Storage (WebDAV)` responses (status code
|
4084
|
+
# 507).
|
4085
|
+
#
|
4086
|
+
# The server is unable to store the representation needed to complete the
|
4087
|
+
# request. See [507 Insufficient Storage
|
4088
|
+
# (WebDAV)](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#507).
|
4089
|
+
#
|
2589
4090
|
class HTTPInsufficientStorage < HTTPServerError
|
2590
4091
|
HAS_BODY: bool
|
2591
4092
|
end
|
2592
4093
|
|
4094
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
4095
|
+
# Response class for `Loop Detected (WebDAV)` responses (status code 508).
|
4096
|
+
#
|
4097
|
+
# The server detected an infinite loop while processing the request. See [508
|
4098
|
+
# Loop Detected
|
4099
|
+
# (WebDAV)](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#508).
|
4100
|
+
#
|
2593
4101
|
class HTTPLoopDetected < HTTPServerError
|
2594
4102
|
HAS_BODY: bool
|
2595
4103
|
end
|
2596
4104
|
|
4105
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
4106
|
+
# Response class for `Not Extended` responses (status code 510).
|
4107
|
+
#
|
4108
|
+
# Further extensions to the request are required for the server to fulfill it.
|
4109
|
+
# See [510 Not
|
4110
|
+
# Extended](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#510).
|
4111
|
+
#
|
2597
4112
|
class HTTPNotExtended < HTTPServerError
|
2598
4113
|
HAS_BODY: bool
|
2599
4114
|
end
|
2600
4115
|
|
4116
|
+
# <!-- rdoc-file=lib/net/http/responses.rb -->
|
4117
|
+
# Response class for `Network Authentication Required` responses (status code
|
4118
|
+
# 511).
|
4119
|
+
#
|
4120
|
+
# The client needs to authenticate to gain network access. See [511 Network
|
4121
|
+
# Authentication
|
4122
|
+
# Required](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#511).
|
4123
|
+
#
|
2601
4124
|
class HTTPNetworkAuthenticationRequired < HTTPServerError
|
2602
4125
|
HAS_BODY: bool
|
2603
4126
|
end
|
2604
4127
|
|
2605
4128
|
# <!-- rdoc-file=lib/net/http/response.rb -->
|
2606
|
-
# HTTP
|
4129
|
+
# This class is the base class for Net::HTTP request classes.
|
4130
|
+
#
|
4131
|
+
# ## About the Examples
|
4132
|
+
#
|
4133
|
+
# Examples here assume that `net/http` has been required (which also requires
|
4134
|
+
# `uri`):
|
4135
|
+
#
|
4136
|
+
# require 'net/http'
|
4137
|
+
#
|
4138
|
+
# Many code examples here use these example websites:
|
4139
|
+
#
|
4140
|
+
# * https://jsonplaceholder.typicode.com.
|
4141
|
+
# * http://example.com.
|
4142
|
+
#
|
4143
|
+
#
|
4144
|
+
# Some examples also assume these variables:
|
4145
|
+
#
|
4146
|
+
# uri = URI('https://jsonplaceholder.typicode.com')
|
4147
|
+
# uri.freeze # Examples may not modify.
|
4148
|
+
# hostname = uri.hostname # => "jsonplaceholder.typicode.com"
|
4149
|
+
# port = uri.port # => 443
|
4150
|
+
#
|
4151
|
+
# So that example requests may be written as:
|
4152
|
+
#
|
4153
|
+
# Net::HTTP.get(uri)
|
4154
|
+
# Net::HTTP.get(hostname, '/index.html')
|
4155
|
+
# Net::HTTP.start(hostname) do |http|
|
4156
|
+
# http.get('/todos/1')
|
4157
|
+
# http.get('/todos/2')
|
4158
|
+
# end
|
4159
|
+
#
|
4160
|
+
# An example that needs a modified URI first duplicates `uri`, then modifies the
|
4161
|
+
# duplicate:
|
4162
|
+
#
|
4163
|
+
# _uri = uri.dup
|
4164
|
+
# _uri.path = '/todos/1'
|
4165
|
+
#
|
4166
|
+
# ## Returned Responses
|
4167
|
+
#
|
4168
|
+
# Method Net::HTTP.get_response returns an instance of one of the subclasses of
|
4169
|
+
# Net::HTTPResponse:
|
4170
|
+
#
|
4171
|
+
# Net::HTTP.get_response(uri)
|
4172
|
+
# # => #<Net::HTTPOK 200 OK readbody=true>
|
4173
|
+
# Net::HTTP.get_response(hostname, '/nosuch')
|
4174
|
+
# # => #<Net::HTTPNotFound 404 Not Found readbody=true>
|
4175
|
+
#
|
4176
|
+
# As does method Net::HTTP#request:
|
4177
|
+
#
|
4178
|
+
# req = Net::HTTP::Get.new(uri)
|
4179
|
+
# Net::HTTP.start(hostname) do |http|
|
4180
|
+
# http.request(req)
|
4181
|
+
# end # => #<Net::HTTPOK 200 OK readbody=true>
|
2607
4182
|
#
|
2608
|
-
#
|
2609
|
-
#
|
4183
|
+
# Class Net::HTTPResponse includes module Net::HTTPHeader, which provides access
|
4184
|
+
# to response header values via (among others):
|
2610
4185
|
#
|
2611
|
-
#
|
2612
|
-
#
|
4186
|
+
# * Hash-like method `[]`.
|
4187
|
+
# * Specific reader methods, such as `content_type`.
|
4188
|
+
#
|
4189
|
+
#
|
4190
|
+
# Examples:
|
4191
|
+
#
|
4192
|
+
# res = Net::HTTP.get_response(uri) # => #<Net::HTTPOK 200 OK readbody=true>
|
4193
|
+
# res['Content-Type'] # => "text/html; charset=UTF-8"
|
4194
|
+
# res.content_type # => "text/html"
|
2613
4195
|
#
|
2614
|
-
#
|
2615
|
-
# subclass. All classes are defined under the Net module. Indentation indicates
|
2616
|
-
# inheritance. For a list of the classes see Net::HTTP.
|
4196
|
+
# ## Response Subclasses
|
2617
4197
|
#
|
2618
|
-
#
|
4198
|
+
# Class Net::HTTPResponse has a subclass for each [HTTP status
|
4199
|
+
# code](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes). You can look
|
4200
|
+
# up the response class for a given code:
|
2619
4201
|
#
|
2620
|
-
# Net::HTTPResponse::CODE_TO_OBJ['
|
4202
|
+
# Net::HTTPResponse::CODE_TO_OBJ['200'] # => Net::HTTPOK
|
4203
|
+
# Net::HTTPResponse::CODE_TO_OBJ['400'] # => Net::HTTPBadRequest
|
4204
|
+
# Net::HTTPResponse::CODE_TO_OBJ['404'] # => Net::HTTPNotFound
|
4205
|
+
#
|
4206
|
+
# And you can retrieve the status code for a response object:
|
4207
|
+
#
|
4208
|
+
# Net::HTTP.get_response(uri).code # => "200"
|
4209
|
+
# Net::HTTP.get_response(hostname, '/nosuch').code # => "404"
|
4210
|
+
#
|
4211
|
+
# The response subclasses (indentation shows class hierarchy):
|
4212
|
+
#
|
4213
|
+
# * Net::HTTPUnknownResponse (for unhandled HTTP extensions).
|
4214
|
+
#
|
4215
|
+
# * Net::HTTPInformation:
|
4216
|
+
#
|
4217
|
+
# * Net::HTTPContinue (100)
|
4218
|
+
# * Net::HTTPSwitchProtocol (101)
|
4219
|
+
# * Net::HTTPProcessing (102)
|
4220
|
+
# * Net::HTTPEarlyHints (103)
|
4221
|
+
#
|
4222
|
+
#
|
4223
|
+
# * Net::HTTPSuccess:
|
4224
|
+
#
|
4225
|
+
# * Net::HTTPOK (200)
|
4226
|
+
# * Net::HTTPCreated (201)
|
4227
|
+
# * Net::HTTPAccepted (202)
|
4228
|
+
# * Net::HTTPNonAuthoritativeInformation (203)
|
4229
|
+
# * Net::HTTPNoContent (204)
|
4230
|
+
# * Net::HTTPResetContent (205)
|
4231
|
+
# * Net::HTTPPartialContent (206)
|
4232
|
+
# * Net::HTTPMultiStatus (207)
|
4233
|
+
# * Net::HTTPAlreadyReported (208)
|
4234
|
+
# * Net::HTTPIMUsed (226)
|
4235
|
+
#
|
4236
|
+
#
|
4237
|
+
# * Net::HTTPRedirection:
|
4238
|
+
#
|
4239
|
+
# * Net::HTTPMultipleChoices (300)
|
4240
|
+
# * Net::HTTPMovedPermanently (301)
|
4241
|
+
# * Net::HTTPFound (302)
|
4242
|
+
# * Net::HTTPSeeOther (303)
|
4243
|
+
# * Net::HTTPNotModified (304)
|
4244
|
+
# * Net::HTTPUseProxy (305)
|
4245
|
+
# * Net::HTTPTemporaryRedirect (307)
|
4246
|
+
# * Net::HTTPPermanentRedirect (308)
|
4247
|
+
#
|
4248
|
+
#
|
4249
|
+
# * Net::HTTPClientError:
|
4250
|
+
#
|
4251
|
+
# * Net::HTTPBadRequest (400)
|
4252
|
+
# * Net::HTTPUnauthorized (401)
|
4253
|
+
# * Net::HTTPPaymentRequired (402)
|
4254
|
+
# * Net::HTTPForbidden (403)
|
4255
|
+
# * Net::HTTPNotFound (404)
|
4256
|
+
# * Net::HTTPMethodNotAllowed (405)
|
4257
|
+
# * Net::HTTPNotAcceptable (406)
|
4258
|
+
# * Net::HTTPProxyAuthenticationRequired (407)
|
4259
|
+
# * Net::HTTPRequestTimeOut (408)
|
4260
|
+
# * Net::HTTPConflict (409)
|
4261
|
+
# * Net::HTTPGone (410)
|
4262
|
+
# * Net::HTTPLengthRequired (411)
|
4263
|
+
# * Net::HTTPPreconditionFailed (412)
|
4264
|
+
# * Net::HTTPRequestEntityTooLarge (413)
|
4265
|
+
# * Net::HTTPRequestURITooLong (414)
|
4266
|
+
# * Net::HTTPUnsupportedMediaType (415)
|
4267
|
+
# * Net::HTTPRequestedRangeNotSatisfiable (416)
|
4268
|
+
# * Net::HTTPExpectationFailed (417)
|
4269
|
+
# * Net::HTTPMisdirectedRequest (421)
|
4270
|
+
# * Net::HTTPUnprocessableEntity (422)
|
4271
|
+
# * Net::HTTPLocked (423)
|
4272
|
+
# * Net::HTTPFailedDependency (424)
|
4273
|
+
# * Net::HTTPUpgradeRequired (426)
|
4274
|
+
# * Net::HTTPPreconditionRequired (428)
|
4275
|
+
# * Net::HTTPTooManyRequests (429)
|
4276
|
+
# * Net::HTTPRequestHeaderFieldsTooLarge (431)
|
4277
|
+
# * Net::HTTPUnavailableForLegalReasons (451)
|
4278
|
+
#
|
4279
|
+
#
|
4280
|
+
# * Net::HTTPServerError:
|
4281
|
+
#
|
4282
|
+
# * Net::HTTPInternalServerError (500)
|
4283
|
+
# * Net::HTTPNotImplemented (501)
|
4284
|
+
# * Net::HTTPBadGateway (502)
|
4285
|
+
# * Net::HTTPServiceUnavailable (503)
|
4286
|
+
# * Net::HTTPGatewayTimeOut (504)
|
4287
|
+
# * Net::HTTPVersionNotSupported (505)
|
4288
|
+
# * Net::HTTPVariantAlsoNegotiates (506)
|
4289
|
+
# * Net::HTTPInsufficientStorage (507)
|
4290
|
+
# * Net::HTTPLoopDetected (508)
|
4291
|
+
# * Net::HTTPNotExtended (510)
|
4292
|
+
# * Net::HTTPNetworkAuthenticationRequired (511)
|
4293
|
+
#
|
4294
|
+
#
|
4295
|
+
#
|
4296
|
+
# There is also the Net::HTTPBadResponse exception which is raised when there is
|
4297
|
+
# a protocol error.
|
2621
4298
|
#
|
2622
4299
|
class HTTPResponse
|
2623
4300
|
CODE_CLASS_TO_OBJ: Hash[untyped, untyped]
|