module Net
class Protocol
VERSION: String
end
class ProtocolError < StandardError
end
class ProtoSyntaxError < ProtocolError
end
class ProtoFatalError < ProtocolError
end
class ProtoUnknownError < ProtocolError
end
class ProtoServerError < ProtocolError
end
class ProtoAuthError < ProtocolError
end
class ProtoCommandError < ProtocolError
end
class ProtoRetriableError < ProtocolError
end
# ProtocRetryError = ProtoRetriableError
# :stopdoc:
class HTTPBadResponse < StandardError
end
class HTTPHeaderSyntaxError < StandardError
end
# == An HTTP client API for Ruby.
#
# Net::HTTP provides a rich library which can be used to build HTTP
# user-agents. For more details about HTTP see
# [RFC2616](http://www.ietf.org/rfc/rfc2616.txt).
#
# Net::HTTP is designed to work closely with URI. URI::HTTP#host,
# URI::HTTP#port and URI::HTTP#request_uri are designed to work with
# Net::HTTP.
#
# If you are only performing a few GET requests you should try OpenURI.
#
# == Simple Examples
#
# All examples assume you have loaded Net::HTTP with:
#
# require 'net/http'
#
# This will also require 'uri' so you don't need to require it separately.
#
# The Net::HTTP methods in the following section do not persist
# connections. They are not recommended if you are performing many HTTP
# requests.
#
# === GET
#
# Net::HTTP.get('example.com', '/index.html') # => String
#
# === GET by URI
#
# uri = URI('http://example.com/index.html?count=10')
# Net::HTTP.get(uri) # => String
#
# === GET with Dynamic Parameters
#
# uri = URI('http://example.com/index.html')
# params = { :limit => 10, :page => 3 }
# uri.query = URI.encode_www_form(params)
#
# res = Net::HTTP.get_response(uri)
# puts res.body if res.is_a?(Net::HTTPSuccess)
#
# === POST
#
# uri = URI('http://www.example.com/search.cgi')
# res = Net::HTTP.post_form(uri, 'q' => 'ruby', 'max' => '50')
# puts res.body
#
# === POST with Multiple Values
#
# uri = URI('http://www.example.com/search.cgi')
# res = Net::HTTP.post_form(uri, 'q' => ['ruby', 'perl'], 'max' => '50')
# puts res.body
#
# == How to use Net::HTTP
#
# The following example code can be used as the basis of an HTTP user-agent
# which can perform a variety of request types using persistent
# connections.
#
# uri = URI('http://example.com/some_path?query=string')
#
# Net::HTTP.start(uri.host, uri.port) do |http|
# request = Net::HTTP::Get.new uri
#
# response = http.request request # Net::HTTPResponse object
# end
#
# Net::HTTP::start immediately creates a connection to an HTTP server which
# is kept open for the duration of the block. The connection will remain
# open for multiple requests in the block if the server indicates it
# supports persistent connections.
#
# If you wish to re-use a connection across multiple HTTP requests without
# automatically closing it you can use ::new and then call #start and
# #finish manually.
#
# The request types Net::HTTP supports are listed below in the section "HTTP
# Request Classes".
#
# For all the Net::HTTP request objects and shortcut request methods you may
# supply either a String for the request path or a URI from which Net::HTTP
# will extract the request path.
#
# === Response Data
#
# uri = URI('http://example.com/index.html')
# res = Net::HTTP.get_response(uri)
#
# # Headers
# res['Set-Cookie'] # => String
# res.get_fields('set-cookie') # => Array
# res.to_hash['set-cookie'] # => Array
# puts "Headers: #{res.to_hash.inspect}"
#
# # Status
# puts res.code # => '200'
# puts res.message # => 'OK'
# puts res.class.name # => 'HTTPOK'
#
# # Body
# puts res.body if res.response_body_permitted?
#
# === Following Redirection
#
# Each Net::HTTPResponse object belongs to a class for its response code.
#
# For example, all 2XX responses are instances of a Net::HTTPSuccess
# subclass, a 3XX response is an instance of a Net::HTTPRedirection
# subclass and a 200 response is an instance of the Net::HTTPOK class. For
# details of response classes, see the section "HTTP Response Classes"
# below.
#
# Using a case statement you can handle various types of responses properly:
#
# def fetch(uri_str, limit = 10)
# # You should choose a better exception.
# raise ArgumentError, 'too many HTTP redirects' if limit == 0
#
# response = Net::HTTP.get_response(URI(uri_str))
#
# case response
# when Net::HTTPSuccess then
# response
# when Net::HTTPRedirection then
# location = response['location']
# warn "redirected to #{location}"
# fetch(location, limit - 1)
# else
# response.value
# end
# end
#
# print fetch('http://www.ruby-lang.org')
#
# === POST
#
# A POST can be made using the Net::HTTP::Post request class. This example
# creates a URL encoded POST body:
#
# uri = URI('http://www.example.com/todo.cgi')
# req = Net::HTTP::Post.new(uri)
# req.set_form_data('from' => '2005-01-01', 'to' => '2005-03-31')
#
# res = Net::HTTP.start(uri.hostname, uri.port) do |http|
# http.request(req)
# end
#
# case res
# when Net::HTTPSuccess, Net::HTTPRedirection
# # OK
# else
# res.value
# end
#
# To send multipart/form-data use Net::HTTPHeader#set_form:
#
# req = Net::HTTP::Post.new(uri)
# req.set_form([['upload', File.open('foo.bar')]], 'multipart/form-data')
#
# Other requests that can contain a body such as PUT can be created in the
# same way using the corresponding request class (Net::HTTP::Put).
#
# === Setting Headers
#
# The following example performs a conditional GET using the
# If-Modified-Since header. If the files has not been modified since the
# time in the header a Not Modified response will be returned. See RFC 2616
# section 9.3 for further details.
#
# uri = URI('http://example.com/cached_response')
# file = File.stat 'cached_response'
#
# req = Net::HTTP::Get.new(uri)
# req['If-Modified-Since'] = file.mtime.rfc2822
#
# res = Net::HTTP.start(uri.hostname, uri.port) {|http|
# http.request(req)
# }
#
# open 'cached_response', 'w' do |io|
# io.write res.body
# end if res.is_a?(Net::HTTPSuccess)
#
# === Basic Authentication
#
# Basic authentication is performed according to
# [RFC2617](http://www.ietf.org/rfc/rfc2617.txt).
#
# uri = URI('http://example.com/index.html?key=value')
#
# req = Net::HTTP::Get.new(uri)
# req.basic_auth 'user', 'pass'
#
# res = Net::HTTP.start(uri.hostname, uri.port) {|http|
# http.request(req)
# }
# puts res.body
#
# === Streaming Response Bodies
#
# By default Net::HTTP reads an entire response into memory. If you are
# handling large files or wish to implement a progress bar you can instead
# stream the body directly to an IO.
#
# uri = URI('http://example.com/large_file')
#
# Net::HTTP.start(uri.host, uri.port) do |http|
# request = Net::HTTP::Get.new uri
#
# http.request request do |response|
# open 'large_file', 'w' do |io|
# response.read_body do |chunk|
# io.write chunk
# end
# end
# end
# end
#
# === HTTPS
#
# HTTPS is enabled for an HTTP connection by Net::HTTP#use_ssl=.
#
# uri = URI('https://secure.example.com/some_path?query=string')
#
# Net::HTTP.start(uri.host, uri.port, :use_ssl => true) do |http|
# request = Net::HTTP::Get.new uri
# response = http.request request # Net::HTTPResponse object
# end
#
# Or if you simply want to make a GET request, you may pass in an URI
# object that has an HTTPS URL. Net::HTTP automatically turns on TLS
# verification if the URI object has a 'https' URI scheme.
#
# uri = URI('https://example.com/')
# Net::HTTP.get(uri) # => String
#
# In previous versions of Ruby you would need to require 'net/https' to use
# HTTPS. This is no longer true.
#
# === Proxies
#
# Net::HTTP will automatically create a proxy from the +http_proxy+
# environment variable if it is present. To disable use of +http_proxy+,
# pass +nil+ for the proxy address.
#
# You may also create a custom proxy:
#
# proxy_addr = 'your.proxy.host'
# proxy_port = 8080
#
# Net::HTTP.new('example.com', nil, proxy_addr, proxy_port).start { |http|
# # always proxy via your.proxy.addr:8080
# }
#
# See Net::HTTP.new for further details and examples such as proxies that
# require a username and password.
#
# === Compression
#
# Net::HTTP automatically adds Accept-Encoding for compression of response
# bodies and automatically decompresses gzip and deflate responses unless a
# Range header was sent.
#
# Compression can be disabled through the Accept-Encoding: identity header.
#
# == HTTP Request Classes
#
# Here is the HTTP request class hierarchy.
#
# * Net::HTTPRequest
# * Net::HTTP::Get
# * Net::HTTP::Head
# * Net::HTTP::Post
# * Net::HTTP::Patch
# * Net::HTTP::Put
# * Net::HTTP::Proppatch
# * Net::HTTP::Lock
# * Net::HTTP::Unlock
# * Net::HTTP::Options
# * Net::HTTP::Propfind
# * Net::HTTP::Delete
# * Net::HTTP::Move
# * Net::HTTP::Copy
# * Net::HTTP::Mkcol
# * Net::HTTP::Trace
#
# == HTTP Response Classes
#
# Here is HTTP response class hierarchy. All classes are defined in Net
# module and are subclasses of Net::HTTPResponse.
#
# HTTPUnknownResponse:: For unhandled HTTP extensions
# HTTPInformation:: 1xx
# HTTPContinue:: 100
# HTTPSwitchProtocol:: 101
# HTTPSuccess:: 2xx
# HTTPOK:: 200
# HTTPCreated:: 201
# HTTPAccepted:: 202
# HTTPNonAuthoritativeInformation:: 203
# HTTPNoContent:: 204
# HTTPResetContent:: 205
# HTTPPartialContent:: 206
# HTTPMultiStatus:: 207
# HTTPIMUsed:: 226
# HTTPRedirection:: 3xx
# HTTPMultipleChoices:: 300
# HTTPMovedPermanently:: 301
# HTTPFound:: 302
# HTTPSeeOther:: 303
# HTTPNotModified:: 304
# HTTPUseProxy:: 305
# HTTPTemporaryRedirect:: 307
# HTTPClientError:: 4xx
# HTTPBadRequest:: 400
# HTTPUnauthorized:: 401
# HTTPPaymentRequired:: 402
# HTTPForbidden:: 403
# HTTPNotFound:: 404
# HTTPMethodNotAllowed:: 405
# HTTPNotAcceptable:: 406
# HTTPProxyAuthenticationRequired:: 407
# HTTPRequestTimeOut:: 408
# HTTPConflict:: 409
# HTTPGone:: 410
# HTTPLengthRequired:: 411
# HTTPPreconditionFailed:: 412
# HTTPRequestEntityTooLarge:: 413
# HTTPRequestURITooLong:: 414
# HTTPUnsupportedMediaType:: 415
# HTTPRequestedRangeNotSatisfiable:: 416
# HTTPExpectationFailed:: 417
# HTTPUnprocessableEntity:: 422
# HTTPLocked:: 423
# HTTPFailedDependency:: 424
# HTTPUpgradeRequired:: 426
# HTTPPreconditionRequired:: 428
# HTTPTooManyRequests:: 429
# HTTPRequestHeaderFieldsTooLarge:: 431
# HTTPUnavailableForLegalReasons:: 451
# HTTPServerError:: 5xx
# HTTPInternalServerError:: 500
# HTTPNotImplemented:: 501
# HTTPBadGateway:: 502
# HTTPServiceUnavailable:: 503
# HTTPGatewayTimeOut:: 504
# HTTPVersionNotSupported:: 505
# HTTPInsufficientStorage:: 507
# HTTPNetworkAuthenticationRequired:: 511
#
# There is also the Net::HTTPBadResponse exception which is raised when
# there is a protocol error.
#
class HTTP < Protocol
# :stopdoc:
VERSION: String
Revision: untyped
HTTPVersion: String
HAVE_ZLIB: bool
# Turns on net/http 1.2 (Ruby 1.8) features.
# Defaults to ON in Ruby 1.8 or later.
def self.version_1_2: () -> ::TrueClass
# Returns true if net/http is in version 1.2 mode.
# Defaults to true.
def self.version_1_2?: () -> ::TrueClass
def self.version_1_1?: () -> ::FalseClass
alias self.is_version_1_1? self.version_1_1?
alias self.is_version_1_2? self.version_1_2?
#
# Gets the body text from the target and outputs it to $stdout. The
# target can either be specified as
# (+uri+, +headers+), or as (+host+, +path+, +port+ = 80); so:
#
# Net::HTTP.get_print URI('http://www.example.com/index.html')
#
# or:
#
# Net::HTTP.get_print 'www.example.com', '/index.html'
#
# you can also specify request headers:
#
# Net::HTTP.get_print URI('http://www.example.com/index.html'), { 'Accept' => 'text/html' }
#
def self.get_print: (URI::Generic uri, ?Hash[String, untyped] header) -> void
| (String host, String path, ?Integer port) -> void
# Sends a GET request to the target and returns the HTTP response
# as a string. The target can either be specified as
# (+uri+, +headers+), or as (+host+, +path+, +port+ = 80); so:
#
# print Net::HTTP.get(URI('http://www.example.com/index.html'))
#
# or:
#
# print Net::HTTP.get('www.example.com', '/index.html')
#
# you can also specify request headers:
#
# Net::HTTP.get(URI('http://www.example.com/index.html'), { 'Accept' => 'text/html' })
#
def self.get: (URI::Generic uri, ?Hash[String, untyped] header) -> String
| (String host, String path, ?Integer port) -> String
# Sends a GET request to the target and returns the HTTP response
# as a Net::HTTPResponse object. The target can either be specified as
# (+uri+, +headers+), or as (+host+, +path+, +port+ = 80); so:
#
# res = Net::HTTP.get_response(URI('http://www.example.com/index.html'))
# print res.body
#
# or:
#
# res = Net::HTTP.get_response('www.example.com', '/index.html')
# print res.body
#
# you can also specify request headers:
#
# Net::HTTP.get_response(URI('http://www.example.com/index.html'), { 'Accept' => 'text/html' })
#
def self.get_response: (URI::Generic uri, ?Hash[String, untyped] header) ?{ (Net::HTTPResponse) -> void } -> Net::HTTPResponse
| (String host, String path, ?Integer port) -> Net::HTTPResponse
# Posts data to the specified URI object.
#
# Example:
#
# require 'net/http'
# require 'uri'
#
# Net::HTTP.post URI('http://www.example.com/api/search'),
# { "q" => "ruby", "max" => "50" }.to_json,
# "Content-Type" => "application/json"
#
def self.post: (URI::Generic url, String data, ?Hash[String, untyped] header) -> Net::HTTPResponse
# Posts HTML form data to the specified URI object.
# The form data must be provided as a Hash mapping from String to String.
# Example:
#
# { "cmd" => "search", "q" => "ruby", "max" => "50" }
#
# This method also does Basic Authentication if and only if +url+.user exists.
# But userinfo for authentication is deprecated (RFC3986).
# So this feature will be removed.
#
# Example:
#
# require 'net/http'
#
# Net::HTTP.post_form URI('http://www.example.com/search.cgi'),
# { "q" => "ruby", "max" => "50" }
#
def self.post_form: (URI::Generic url, Hash[String, untyped] params) -> Net::HTTPResponse
# The default port to use for HTTP requests; defaults to 80.
def self.default_port: () -> Integer
# The default port to use for HTTP requests; defaults to 80.
def self.http_default_port: () -> Integer
# The default port to use for HTTPS requests; defaults to 443.
def self.https_default_port: () -> Integer
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
| [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
alias self.newobj self.new
# Creates a new Net::HTTP object without opening a TCP connection or
# HTTP session.
#
# The +address+ should be a DNS hostname or IP address, the +port+ is the
# port the server operates on. If no +port+ is given the default port for
# HTTP or HTTPS is used.
#
# If none of the +p_+ arguments are given, the proxy host and port are
# taken from the +http_proxy+ environment variable (or its uppercase
# equivalent) if present. If the proxy requires authentication you must
# supply it by hand. See URI::Generic#find_proxy for details of proxy
# detection from the environment. To disable proxy detection set +p_addr+
# to nil.
#
# If you are connecting to a custom proxy, +p_addr+ specifies the DNS name
# or IP address of the proxy host, +p_port+ the port to use to access the
# proxy, +p_user+ and +p_pass+ the username and password if authorization
# is required to use the proxy, and p_no_proxy hosts which do not
# use the proxy.
#
def self.new: (String address, ?Integer? port, ?String | :ENV | nil p_addr, ?Integer? p_port, ?String? p_user, ?String? p_pass, ?untyped? p_no_proxy) -> Net::HTTP
def inspect: () -> String
# *WARNING* This method opens a serious security hole.
# Never use this method in production code.
#
# Sets an output stream for debugging.
#
# http = Net::HTTP.new(hostname)
# http.set_debug_output $stderr
# http.start { .... }
#
def set_debug_output: (IO output) -> void
# The DNS host name or IP address to connect to.
attr_reader address: String
# The port number to connect to.
attr_reader port: Integer
# The local host used to establish the connection.
attr_accessor local_host: String
# The local port used to establish the connection.
attr_accessor local_port: Integer
attr_writer proxy_from_env: untyped
attr_accessor proxy_address: String?
attr_accessor proxy_port: Integer?
attr_accessor proxy_user: String?
attr_accessor proxy_pass: String?
# The IP address to connect to/used to connect to
# Set the IP address to connect to
attr_accessor ipaddr: String?
# Number of seconds to wait for the connection to open. Any number
# may be used, including Floats for fractional seconds. If the HTTP
# object cannot open a connection in this many seconds, it raises a
# Net::OpenTimeout exception. The default value is 60 seconds.
attr_accessor open_timeout: (Float | Integer)
# Number of seconds to wait for one block to be read (via one read(2)
# call). Any number may be used, including Floats for fractional
# seconds. If the HTTP object cannot read data in this many seconds,
# it raises a Net::ReadTimeout exception. The default value is 60 seconds.
# Setter for the read_timeout attribute.
attr_accessor read_timeout: (Float | Integer)
# Number of seconds to wait for one block to be written (via one write(2)
# call). Any number may be used, including Floats for fractional
# seconds. If the HTTP object cannot write data in this many seconds,
# it raises a Net::WriteTimeout exception. The default value is 60 seconds.
# Net::WriteTimeout is not raised on Windows.
# Setter for the write_timeout attribute.
attr_accessor write_timeout: (Float | Integer)
# Maximum number of times to retry an idempotent request in case of
# Net::ReadTimeout, IOError, EOFError, Errno::ECONNRESET,
# Errno::ECONNABORTED, Errno::EPIPE, OpenSSL::SSL::SSLError,
# Timeout::Error.
# Should be a non-negative integer number. Zero means no retries.
# The default value is 1.
attr_accessor max_retries: Integer
# Seconds to wait for 100 Continue response. If the HTTP object does not
# receive a response in this many seconds it sends the request body. The
# default value is +nil+.
# Setter for the continue_timeout attribute.
attr_accessor continue_timeout: (Float | Integer | nil)
# Seconds to reuse the connection of the previous request.
# If the idle time is less than this Keep-Alive Timeout,
# Net::HTTP reuses the TCP/IP socket used by the previous communication.
# The default value is 2 seconds.
attr_accessor keep_alive_timeout: (Float | Integer)
# Returns true if the HTTP session has been started.
def started?: () -> bool
alias active? started?
attr_accessor close_on_empty_response: untyped
# Returns true if SSL/TLS is being used with HTTP.
def use_ssl?: () -> bool
# Turn on/off SSL.
# This flag must be set before starting session.
# If you change use_ssl value after session started,
# a Net::HTTP object raises IOError.
def use_ssl=: (boolish flag) -> void
SSL_IVNAMES: Array[untyped]
SSL_ATTRIBUTES: Array[Symbol]
# Sets path of a CA certification file in PEM format.
#
# The file can contain several CA certificates.
attr_accessor ca_file: untyped
# Sets path of a CA certification directory containing certifications in
# PEM format.
attr_accessor ca_path: untyped
# Sets an OpenSSL::X509::Certificate object as client certificate.
# (This method is appeared in Michal Rokos's OpenSSL extension).
attr_accessor cert: untyped
# Sets the X509::Store to verify peer certificate.
attr_accessor cert_store: untyped
# Sets the available ciphers. See OpenSSL::SSL::SSLContext#ciphers=
attr_accessor ciphers: untyped
# Sets the extra X509 certificates to be added to the certificate chain.
# See OpenSSL::SSL::SSLContext#extra_chain_cert=
attr_accessor extra_chain_cert: untyped
# Sets an OpenSSL::PKey::RSA or OpenSSL::PKey::DSA object.
# (This method is appeared in Michal Rokos's OpenSSL extension.)
attr_accessor key: untyped
# Sets the SSL timeout seconds.
attr_accessor ssl_timeout: untyped
# Sets the SSL version. See OpenSSL::SSL::SSLContext#ssl_version=
attr_accessor ssl_version: untyped
# Sets the minimum SSL version. See OpenSSL::SSL::SSLContext#min_version=
attr_accessor min_version: untyped
# Sets the maximum SSL version. See OpenSSL::SSL::SSLContext#max_version=
attr_accessor max_version: untyped
# Sets the verify callback for the server certification verification.
attr_accessor verify_callback: untyped
# Sets the maximum depth for the certificate chain verification.
attr_accessor verify_depth: untyped
# Sets the flags for server the certification verification at beginning of
# SSL/TLS session.
#
# OpenSSL::SSL::VERIFY_NONE or OpenSSL::SSL::VERIFY_PEER are acceptable.
attr_accessor verify_mode: untyped
# Sets to check the server certificate is valid for the hostname.
# See OpenSSL::SSL::SSLContext#verify_hostname=
attr_accessor verify_hostname: untyped
# Returns the X.509 certificates the server presented.
def peer_cert: () -> (nil | untyped)
# Opens a TCP connection and HTTP session.
#
# When this method is called with a block, it passes the Net::HTTP
# object to the block, and closes the TCP connection and HTTP session
# after the block has been executed.
#
# When called with a block, it returns the return value of the
# block; otherwise, it returns self.
#
def start: [T] () { (Net::HTTP) -> T } -> T
| () -> Net::HTTP
public
# Finishes the HTTP session and closes the TCP connection.
# Raises IOError if the session has not been started.
def finish: () -> void
public
# Creates an HTTP proxy class which behaves like Net::HTTP, but
# performs all access via the specified proxy.
#
# This class is obsolete. You may pass these same parameters directly to
# Net::HTTP.new. See Net::HTTP.new for details of the arguments.
def self.Proxy: (?(Symbol | String) p_addr, ?Integer? p_port, ?String? p_user, ?String? p_pass) -> untyped
# returns true if self is a class which was created by HTTP::Proxy.
def self.proxy_class?: () -> bool
# Address of proxy host. If Net::HTTP does not use a proxy, nil.
attr_reader self.proxy_address: String?
# Port number of proxy host. If Net::HTTP does not use a proxy, nil.
attr_reader self.proxy_port: Integer?
# User name for accessing proxy. If Net::HTTP does not use a proxy, nil.
attr_reader self.proxy_user: String?
# User password for accessing proxy. If Net::HTTP does not use a proxy,
# nil.
attr_reader self.proxy_pass: String?
# True if requests for this connection will be proxied
def proxy?: () -> bool
# True if the proxy for this connection is determined from the environment
def proxy_from_env?: () -> bool
def proxy_uri: () -> (nil | URI::Generic)
alias proxyaddr proxy_address
alias proxyport proxy_port
public
# Retrieves data from +path+ on the connected-to host which may be an
# absolute path String or a URI to extract the path from.
#
# +initheader+ must be a Hash like { 'Accept' => '*/*', ... },
# and it defaults to an empty hash.
# If +initheader+ doesn't have the key 'accept-encoding', then
# a value of "gzip;q=1.0,deflate;q=0.6,identity;q=0.3" is used,
# so that gzip compression is used in preference to deflate
# compression, which is used in preference to no compression.
# Ruby doesn't have libraries to support the compress (Lempel-Ziv)
# compression, so that is not supported. The intent of this is
# to reduce bandwidth by default. If this routine sets up
# compression, then it does the decompression also, removing
# the header as well to prevent confusion. Otherwise
# it leaves the body as it found it.
#
# This method returns a Net::HTTPResponse object.
#
# If called with a block, yields each fragment of the
# entity body in turn as a string as it is read from
# the socket. Note that in this case, the returned response
# object will *not* contain a (meaningful) body.
#
# +dest+ argument is obsolete.
# It still works but you must not use it.
#
# This method never raises an exception.
#
# response = http.get('/index.html')
#
# # using block
# File.open('result.txt', 'w') {|f|
# http.get('/~foo/') do |str|
# f.write str
# end
# }
#
def get: (String path, ?Hash[String, untyped] initheader, ?bot dest) ?{ (String body_segment) -> void } -> Net::HTTPResponse
# Gets only the header from +path+ on the connected-to host.
# +header+ is a Hash like { 'Accept' => '*/*', ... }.
#
# This method returns a Net::HTTPResponse object.
#
# This method never raises an exception.
#
# response = nil
# Net::HTTP.start('some.www.server', 80) {|http|
# response = http.head('/index.html')
# }
# p response['content-type']
#
def head: (String path, ?Hash[String, untyped] initheader) -> Net::HTTPResponse
# Posts +data+ (must be a String) to +path+. +header+ must be a Hash
# like { 'Accept' => '*/*', ... }.
#
# This method returns a Net::HTTPResponse object.
#
# If called with a block, yields each fragment of the
# entity body in turn as a string as it is read from
# the socket. Note that in this case, the returned response
# object will *not* contain a (meaningful) body.
#
# +dest+ argument is obsolete.
# It still works but you must not use it.
#
# This method never raises exception.
#
# response = http.post('/cgi-bin/search.rb', 'query=foo')
#
# # using block
# File.open('result.txt', 'w') {|f|
# http.post('/cgi-bin/search.rb', 'query=foo') do |str|
# f.write str
# end
# }
#
# You should set Content-Type: header field for POST.
# If no Content-Type: field given, this method uses
# "application/x-www-form-urlencoded" by default.
#
def post: (String path, String data, ?Hash[String, untyped] initheader, ?bot dest) ?{ (String body_segment) -> void } -> Net::HTTPResponse
# Sends a PATCH request to the +path+ and gets a response,
# as an HTTPResponse object.
def patch: (String path, String data, ?Hash[String, untyped] initheader, ?bot dest) ?{ (String body_segment) -> void } -> Net::HTTPResponse
def put: (String path, String data, ?Hash[String, untyped] initheader) -> Net::HTTPResponse
# Sends a PROPPATCH request to the +path+ and gets a response,
# as an HTTPResponse object.
def proppatch: (String path, String body, ?Hash[String, untyped] initheader) -> Net::HTTPResponse
# Sends a LOCK request to the +path+ and gets a response,
# as an HTTPResponse object.
def lock: (String path, String body, ?Hash[String, untyped] initheader) -> Net::HTTPResponse
# Sends a UNLOCK request to the +path+ and gets a response,
# as an HTTPResponse object.
def unlock: (String path, String body, ?Hash[String, untyped] initheader) -> Net::HTTPResponse
# Sends a OPTIONS request to the +path+ and gets a response,
# as an HTTPResponse object.
def options: (String path, ?Hash[String, untyped] initheader) -> Net::HTTPResponse
# Sends a PROPFIND request to the +path+ and gets a response,
# as an HTTPResponse object.
def propfind: (String path, ?untyped? body, ?Hash[String, untyped] initheader) -> Net::HTTPResponse
# Sends a DELETE request to the +path+ and gets a response,
# as an HTTPResponse object.
def delete: (String path, ?Hash[String, untyped] initheader) -> Net::HTTPResponse
# Sends a MOVE request to the +path+ and gets a response,
# as an HTTPResponse object.
def move: (String path, ?Hash[String, untyped] initheader) -> Net::HTTPResponse
# Sends a COPY request to the +path+ and gets a response,
# as an HTTPResponse object.
def copy: (String path, ?Hash[String, untyped] initheader) -> Net::HTTPResponse
# Sends a MKCOL request to the +path+ and gets a response,
# as an HTTPResponse object.
def mkcol: (String path, ?untyped? body, ?Hash[String, untyped] initheader) -> Net::HTTPResponse
# Sends a TRACE request to the +path+ and gets a response,
# as an HTTPResponse object.
def trace: (String path, ?Hash[String, untyped] initheader) -> Net::HTTPResponse
def request_get: (String path, ?Hash[String, untyped] initheader) ?{ (Net::HTTPResponse response) -> void } -> Net::HTTPResponse
# Sends a HEAD request to the +path+ and returns the response
# as a Net::HTTPResponse object.
#
# Returns the response.
#
# This method never raises Net::* exceptions.
#
# response = http.request_head('/index.html')
# p response['content-type']
#
def request_head: (String path, ?Hash[String, untyped] initheader) ?{ (Net::HTTPResponse response) -> void } -> Net::HTTPResponse
def request_post: (String path, String data, ?Hash[String, untyped] initheader) ?{ (Net::HTTPResponse response) -> void } -> Net::HTTPResponse
def request_put: (String path, String data, ?Hash[String, untyped] initheader) ?{ (Net::HTTPResponse response) -> void } -> Net::HTTPResponse
alias get2 request_get
alias head2 request_head
alias post2 request_post
alias put2 request_put
# Sends an HTTP request to the HTTP server.
# Also sends a DATA string if +data+ is given.
#
# Returns a Net::HTTPResponse object.
#
# This method never raises Net::* exceptions.
#
# response = http.send_request('GET', '/index.html')
# puts response.body
#
def send_request: (String name, String path, ?String? data, ?Hash[String, untyped]? header) -> Net::HTTPResponse
def request: (Net::HTTPRequest req, ?String? body) ?{ (Net::HTTPResponse response) -> void } -> Net::HTTPResponse
end
class HTTPGenericRequest
include Net::HTTPHeader
def initialize: (String m, boolish reqbody, boolish resbody, (URI::Generic | String) uri_or_path, ?Hash[String, untyped] initheader) -> Net::HTTP
attr_reader method: String
attr_reader path: String
attr_reader uri: URI::Generic
# Automatically set to false if the user sets the Accept-Encoding header.
# This indicates they wish to handle Content-encoding in responses
# themselves.
attr_reader decode_content: bool
def inspect: () -> String
def []=: (untyped key, untyped val) -> void
def request_body_permitted?: () -> bool
def response_body_permitted?: () -> bool
def body_exist?: () -> bool
attr_accessor body: String?
attr_accessor body_stream: untyped
end
module HTTPHeader
def initialize_http_header: (Hash[untyped, untyped] initheader) -> void
def size: () -> Integer
alias length size
type key = String | Symbol
# Returns the header field corresponding to the case-insensitive key.
# For example, a key of "Content-Type" might return "text/html"
def []: (key key) -> (nil | String)
# Sets the header field corresponding to the case-insensitive key.
def []=: (key key, untyped val) -> void
# [Ruby 1.8.3]
# Adds a value to a named header field, instead of replacing its value.
# Second argument +val+ must be a String.
# See also #[]=, #[] and #get_fields.
#
# request.add_field 'X-My-Header', 'a'
# p request['X-My-Header'] #=> "a"
# p request.get_fields('X-My-Header') #=> ["a"]
# request.add_field 'X-My-Header', 'b'
# p request['X-My-Header'] #=> "a, b"
# p request.get_fields('X-My-Header') #=> ["a", "b"]
# request.add_field 'X-My-Header', 'c'
# p request['X-My-Header'] #=> "a, b, c"
# p request.get_fields('X-My-Header') #=> ["a", "b", "c"]
#
def add_field: (key key, untyped val) -> void
private
def set_field: (key key, untyped val) -> void
def append_field_value: (untyped ary, untyped val) -> void
public
# [Ruby 1.8.3]
# Returns an array of header field strings corresponding to the
# case-insensitive +key+. This method allows you to get duplicated
# header fields without any processing. See also #[].
#
# p response.get_fields('Set-Cookie')
# #=> ["session=al98axx; expires=Fri, 31-Dec-1999 23:58:23",
# "query=rubyscript; expires=Fri, 31-Dec-1999 23:58:23"]
# p response['Set-Cookie']
# #=> "session=al98axx; expires=Fri, 31-Dec-1999 23:58:23, query=rubyscript; expires=Fri, 31-Dec-1999 23:58:23"
#
def get_fields: (key key) -> (nil | Array[String])
# Returns the header field corresponding to the case-insensitive key.
# Returns the default value +args+, or the result of the block, or
# raises an IndexError if there's no header field named +key+
# See Hash#fetch
def fetch: (key key) -> String
| (key key, untyped) -> untyped
| (key key) { (String) -> untyped } -> untyped
def each_header: () { (String, String) -> untyped } -> Hash[String, Array[String]]
| () -> Enumerator[[String, String], Hash[String, Array[String]]]
alias each each_header
def each_name: () { (String) -> untyped } -> Hash[String, Array[String]]
| () -> Enumerator[String, Hash[String, Array[String]]]
alias each_key each_name
def each_capitalized_name: () { (String) -> untyped } -> Hash[String, Array[String]]
| () -> Enumerator[String, Hash[String, Array[String]]]
def each_value: () { (String) -> untyped } -> Hash[String, Array[String]]
| () -> Enumerator[String, Hash[String, Array[String]]]
# Removes a header field, specified by case-insensitive key.
def delete: (key key) -> (Array[String] | nil)
# true if +key+ header exists.
def key?: (key key) -> bool
# Returns a Hash consisting of header names and array of values.
# e.g.
# {"cache-control" => ["private"],
# "content-type" => ["text/html"],
# "date" => ["Wed, 22 Jun 2005 22:11:50 GMT"]}
def to_hash: () -> Hash[String, Array[String]]
# As for #each_header, except the keys are provided in capitalized form.
#
# Note that header names are capitalized systematically;
# capitalization may not match that used by the remote HTTP
# server in its response.
#
# Returns an enumerator if no block is given.
def each_capitalized: () { (String, String) -> untyped } -> Hash[String, Array[String]]
| () -> Enumerator[[String, String], Hash[String, Array[String]]]
alias canonical_each each_capitalized
private
def capitalize: (key name) -> String
public
# Returns an Array of Range objects which represent the Range:
# HTTP header field, or +nil+ if there is no such header.
def range: () -> (nil | Array[Range[Integer]])
# Sets the HTTP Range: header.
# Accepts either a Range object as a single argument,
# or a beginning index and a length from that index.
# Example:
#
# req.range = (0..1023)
# req.set_range 0, 1023
#
def set_range: (Range[Integer] | Numeric r, ?Integer? e) -> Range[Integer]
alias range= set_range
# Returns an Integer object which represents the HTTP Content-Length:
# header field, or +nil+ if that field was not provided.
def content_length: () -> (nil | Integer)
def content_length=: (Integer len) -> void
# Returns "true" if the "transfer-encoding" header is present and
# set to "chunked". This is an HTTP/1.1 feature, allowing
# the content to be sent in "chunks" without at the outset
# stating the entire content length.
def chunked?: () -> bool
# Returns a Range object which represents the value of the Content-Range:
# header field.
# For a partial entity body, this indicates where this fragment
# fits inside the full entity body, as range of byte offsets.
def content_range: () -> (Range[Integer] | nil)
# The length of the range represented in Content-Range: header.
def range_length: () -> (nil | Integer)
# Returns a content type string such as "text/html".
# This method returns nil if Content-Type: header field does not exist.
def content_type: () -> (nil | String)
# Returns a content type string such as "text".
# This method returns nil if Content-Type: header field does not exist.
def main_type: () -> (nil | String)
# Returns a content type string such as "html".
# This method returns nil if Content-Type: header field does not exist
# or sub-type is not given (e.g. "Content-Type: text").
def sub_type: () -> (nil | String)
# Any parameters specified for the content type, returned as a Hash.
# For example, a header of Content-Type: text/html; charset=EUC-JP
# would result in type_params returning {'charset' => 'EUC-JP'}
def type_params: () -> Hash[untyped, untyped]
# Sets the content type in an HTTP header.
# The +type+ should be a full HTTP content type, e.g. "text/html".
# The +params+ are an optional Hash of parameters to add after the
# content type, e.g. {'charset' => 'iso-8859-1'}
def set_content_type: (key `type`, ?Hash[untyped, untyped] params) -> void
alias content_type= set_content_type
# Set header fields and a body from HTML form data.
# +params+ should be an Array of Arrays or
# a Hash containing HTML form data.
# Optional argument +sep+ means data record separator.
#
# Values are URL encoded as necessary and the content-type is set to
# application/x-www-form-urlencoded
#
# Example:
# http.form_data = {"q" => "ruby", "lang" => "en"}
# http.form_data = {"q" => ["ruby", "perl"], "lang" => "en"}
# http.set_form_data({"q" => "ruby", "lang" => "en"}, ';')
#
def set_form_data: (Hash[untyped, untyped] params, ?String sep) -> void
alias form_data= set_form_data
# Set an HTML form data set.
# +params+ :: The form data to set, which should be an enumerable.
# See below for more details.
# +enctype+ :: The content type to use to encode the form submission,
# which should be application/x-www-form-urlencoded or
# multipart/form-data.
# +formopt+ :: An options hash, supporting the following options:
# :boundary :: The boundary of the multipart message. If
# not given, a random boundary will be used.
# :charset :: The charset of the form submission. All
# field names and values of non-file fields
# should be encoded with this charset.
#
# Each item of params should respond to +each+ and yield 2-3 arguments,
# or an array of 2-3 elements. The arguments yielded should be:
# * The name of the field.
# * The value of the field, it should be a String or a File or IO-like.
# * An options hash, supporting the following options, only
# used for file uploads:
# :filename :: The name of the file to use.
# :content_type :: The content type of the uploaded file.
#
# Each item is a file field or a normal field.
# If +value+ is a File object or the +opt+ hash has a :filename key,
# the item is treated as a file field.
#
# If Transfer-Encoding is set as chunked, this sends the request using
# chunked encoding. Because chunked encoding is HTTP/1.1 feature,
# you should confirm that the server supports HTTP/1.1 before using
# chunked encoding.
#
# Example:
# req.set_form([["q", "ruby"], ["lang", "en"]])
#
# req.set_form({"f"=>File.open('/path/to/filename')},
# "multipart/form-data",
# charset: "UTF-8",
# )
#
# req.set_form([["f",
# File.open('/path/to/filename.bar'),
# {filename: "other-filename.foo"}
# ]],
# "multipart/form-data",
# )
#
# See also RFC 2388, RFC 2616, HTML 4.01, and HTML5
#
def set_form: (Hash[untyped, untyped] params, ?String enctype, ?Hash[untyped, untyped] formopt) -> void
# Set the Authorization: header for "Basic" authorization.
def basic_auth: (String account, String password) -> void
# Set Proxy-Authorization: header for "Basic" authorization.
def proxy_basic_auth: (String account, String password) -> void
private
def basic_encode: (String account, String password) -> String
public
def connection_close?: () -> bool
def connection_keep_alive?: () -> bool
end
class HTTPRequest < HTTPGenericRequest
def initialize: (String path, ?Hash[String, untyped] initheader) -> void
| (URI::Generic uri, ?Hash[String, untyped] initheader) -> void
end
class HTTP::Get < HTTPRequest
METHOD: String
REQUEST_HAS_BODY: bool
RESPONSE_HAS_BODY: bool
end
# See Net::HTTPGenericRequest for attributes and methods.
# See Net::HTTP for usage examples.
class HTTP::Head < HTTPRequest
METHOD: String
REQUEST_HAS_BODY: bool
RESPONSE_HAS_BODY: bool
end
# See Net::HTTPGenericRequest for attributes and methods.
# See Net::HTTP for usage examples.
class HTTP::Post < HTTPRequest
METHOD: String
REQUEST_HAS_BODY: bool
RESPONSE_HAS_BODY: bool
end
# See Net::HTTPGenericRequest for attributes and methods.
# See Net::HTTP for usage examples.
class HTTP::Put < HTTPRequest
METHOD: String
REQUEST_HAS_BODY: bool
RESPONSE_HAS_BODY: bool
end
# See Net::HTTPGenericRequest for attributes and methods.
# See Net::HTTP for usage examples.
class HTTP::Delete < HTTPRequest
METHOD: String
REQUEST_HAS_BODY: bool
RESPONSE_HAS_BODY: bool
end
# See Net::HTTPGenericRequest for attributes and methods.
class HTTP::Options < HTTPRequest
METHOD: String
REQUEST_HAS_BODY: bool
RESPONSE_HAS_BODY: bool
end
# See Net::HTTPGenericRequest for attributes and methods.
class HTTP::Trace < HTTPRequest
METHOD: String
REQUEST_HAS_BODY: bool
RESPONSE_HAS_BODY: bool
end
# See Net::HTTPGenericRequest for attributes and methods.
class HTTP::Patch < HTTPRequest
METHOD: String
REQUEST_HAS_BODY: bool
RESPONSE_HAS_BODY: bool
end
# See Net::HTTPGenericRequest for attributes and methods.
class HTTP::Propfind < HTTPRequest
METHOD: String
REQUEST_HAS_BODY: bool
RESPONSE_HAS_BODY: bool
end
# See Net::HTTPGenericRequest for attributes and methods.
class HTTP::Proppatch < HTTPRequest
METHOD: String
REQUEST_HAS_BODY: bool
RESPONSE_HAS_BODY: bool
end
# See Net::HTTPGenericRequest for attributes and methods.
class HTTP::Mkcol < HTTPRequest
METHOD: String
REQUEST_HAS_BODY: bool
RESPONSE_HAS_BODY: bool
end
# See Net::HTTPGenericRequest for attributes and methods.
class HTTP::Copy < HTTPRequest
METHOD: String
REQUEST_HAS_BODY: bool
RESPONSE_HAS_BODY: bool
end
# See Net::HTTPGenericRequest for attributes and methods.
class HTTP::Move < HTTPRequest
METHOD: String
REQUEST_HAS_BODY: bool
RESPONSE_HAS_BODY: bool
end
# See Net::HTTPGenericRequest for attributes and methods.
class HTTP::Lock < HTTPRequest
METHOD: String
REQUEST_HAS_BODY: bool
RESPONSE_HAS_BODY: bool
end
# See Net::HTTPGenericRequest for attributes and methods.
class HTTP::Unlock < HTTPRequest
METHOD: String
REQUEST_HAS_BODY: bool
RESPONSE_HAS_BODY: bool
end
class HTTPResponse
# true if the response has a body.
def self.body_permitted?: () -> bool
public
include Net::HTTPHeader
# The HTTP version supported by the server.
attr_reader http_version: String
# The HTTP result code string. For example, '302'. You can also
# determine the response type by examining which response subclass
# the response object is an instance of.
attr_reader code: String
# The HTTP result message sent by the server. For example, 'Not Found'.
attr_reader message: String
alias msg message
# The URI used to fetch this response. The response URI is only available
# if a URI was used to create the request.
attr_reader uri: (URI::Generic | nil)
# Set to true automatically when the request did not contain an
# Accept-Encoding header from the user.
attr_accessor decode_content: bool
def inspect: () -> String
def code_type: () -> untyped
def error!: () -> untyped
def error_type: () -> (Net::HTTPError | Net::HTTPServerException | Net::HTTPRetriableError | Net::HTTPFatalError)
# Raises an HTTP error if the response is not 2xx (success).
def value: () -> (nil | untyped)
def uri=: (URI::Generic uri) -> void
interface _Dest
def <<: (String) -> void
end
# Gets the entity body returned by the remote HTTP server.
#
# If a block is given, the body is passed to the block, and
# the body is provided in fragments, as it is read in from the socket.
#
# If +dest+ argument is given, response is read into that variable,
# with dest#<<
method (it could be String or IO, or any
# other object responding to <<
).
#
# Calling this method a second or subsequent time for the same
# HTTPResponse object will return the value already read.
#
# http.request_get('/index.html') {|res|
# puts res.read_body
# }
#
# http.request_get('/index.html') {|res|
# p res.read_body.object_id # 538149362
# p res.read_body.object_id # 538149362
# }
#
# # using iterator
# http.request_get('/index.html') {|res|
# res.read_body do |segment|
# print segment
# end
# }
#
def read_body: () -> String
| (_Dest dest) -> String
| () { (String) -> void } -> String
# Returns the full entity body.
#
# Calling this method a second or subsequent time will return the
# string already read.
#
# http.request_get('/index.html') {|res|
# puts res.body
# }
#
# http.request_get('/index.html') {|res|
# p res.body.object_id # 538149362
# p res.body.object_id # 538149362
# }
#
def body: () -> String
# Because it may be necessary to modify the body, Eg, decompression
# this method facilitates that.
def body=: (untyped value) -> void
alias entity body
end
class HTTPUnknownResponse < HTTPResponse
HAS_BODY: bool
EXCEPTION_TYPE: Net::HTTPError
end
class HTTPInformation < HTTPResponse
# 1xx
HAS_BODY: bool
EXCEPTION_TYPE: Net::HTTPError
end
class HTTPSuccess < HTTPResponse
# 2xx
HAS_BODY: bool
EXCEPTION_TYPE: Net::HTTPError
end
class HTTPRedirection < HTTPResponse
# 3xx
HAS_BODY: bool
EXCEPTION_TYPE: Net::HTTPRetriableError
end
class HTTPClientError < HTTPResponse
# 4xx
HAS_BODY: bool
# EXCEPTION_TYPE: Net::HTTPClientException -> Change after introduction of class/module alias
EXCEPTION_TYPE: untyped
end
class HTTPServerError < HTTPResponse
# 5xx
HAS_BODY: bool
EXCEPTION_TYPE: Net::HTTPFatalError
end
class HTTPContinue < HTTPInformation
# 100
HAS_BODY: bool
end
class HTTPSwitchProtocol < HTTPInformation
# 101
HAS_BODY: bool
end
class HTTPProcessing < HTTPInformation
# 102
HAS_BODY: bool
end
class HTTPEarlyHints < HTTPInformation
# 103 - RFC 8297
HAS_BODY: bool
end
class HTTPOK < HTTPSuccess
# 200
HAS_BODY: bool
end
class HTTPCreated < HTTPSuccess
# 201
HAS_BODY: bool
end
class HTTPAccepted < HTTPSuccess
# 202
HAS_BODY: bool
end
class HTTPNonAuthoritativeInformation < HTTPSuccess
# 203
HAS_BODY: bool
end
class HTTPNoContent < HTTPSuccess
# 204
HAS_BODY: bool
end
class HTTPResetContent < HTTPSuccess
# 205
HAS_BODY: bool
end
class HTTPPartialContent < HTTPSuccess
# 206
HAS_BODY: bool
end
class HTTPMultiStatus < HTTPSuccess
# 207 - RFC 4918
HAS_BODY: bool
end
class HTTPAlreadyReported < HTTPSuccess
# 208 - RFC 5842
HAS_BODY: bool
end
class HTTPIMUsed < HTTPSuccess
# 226 - RFC 3229
HAS_BODY: bool
end
class HTTPMultipleChoices < HTTPRedirection
# 300
HAS_BODY: bool
end
HTTPMultipleChoice: HTTPMultipleChoices
class HTTPMovedPermanently < HTTPRedirection
# 301
HAS_BODY: bool
end
class HTTPFound < HTTPRedirection
# 302
HAS_BODY: bool
end
# HTTPMovedTemporarily: HTTPFound
class HTTPSeeOther < HTTPRedirection
# 303
HAS_BODY: bool
end
class HTTPNotModified < HTTPRedirection
# 304
HAS_BODY: bool
end
class HTTPUseProxy < HTTPRedirection
# 305
HAS_BODY: bool
end
class HTTPTemporaryRedirect < HTTPRedirection
# 306 Switch Proxy - no longer unused
# 307
HAS_BODY: bool
end
class HTTPPermanentRedirect < HTTPRedirection
# 308
HAS_BODY: bool
end
class HTTPBadRequest < HTTPClientError
# 400
HAS_BODY: bool
end
class HTTPUnauthorized < HTTPClientError
# 401
HAS_BODY: bool
end
class HTTPPaymentRequired < HTTPClientError
# 402
HAS_BODY: bool
end
class HTTPForbidden < HTTPClientError
# 403
HAS_BODY: bool
end
class HTTPNotFound < HTTPClientError
# 404
HAS_BODY: bool
end
class HTTPMethodNotAllowed < HTTPClientError
# 405
HAS_BODY: bool
end
class HTTPNotAcceptable < HTTPClientError
# 406
HAS_BODY: bool
end
class HTTPProxyAuthenticationRequired < HTTPClientError
# 407
HAS_BODY: bool
end
class HTTPRequestTimeout < HTTPClientError
# 408
HAS_BODY: bool
end
# HTTPRequestTimeOut: HTTPRequestTimeout
class HTTPConflict < HTTPClientError
# 409
HAS_BODY: bool
end
class HTTPGone < HTTPClientError
# 410
HAS_BODY: bool
end
class HTTPLengthRequired < HTTPClientError
# 411
HAS_BODY: bool
end
class HTTPPreconditionFailed < HTTPClientError
# 412
HAS_BODY: bool
end
class HTTPPayloadTooLarge < HTTPClientError
# 413
HAS_BODY: bool
end
# HTTPRequestEntityTooLarge: untyped
class HTTPURITooLong < HTTPClientError
# 414
HAS_BODY: bool
end
# HTTPRequestURITooLong: untyped
# HTTPRequestURITooLarge: untyped
class HTTPUnsupportedMediaType < HTTPClientError
# 415
HAS_BODY: bool
end
class HTTPRangeNotSatisfiable < HTTPClientError
# 416
HAS_BODY: bool
end
# HTTPRequestedRangeNotSatisfiable: untyped
class HTTPExpectationFailed < HTTPClientError
# 417
HAS_BODY: bool
end
class HTTPMisdirectedRequest < HTTPClientError
# 418 I'm a teapot - RFC 2324; a joke RFC
# 420 Enhance Your Calm - Twitter
# 421 - RFC 7540
HAS_BODY: bool
end
class HTTPUnprocessableEntity < HTTPClientError
# 422 - RFC 4918
HAS_BODY: bool
end
class HTTPLocked < HTTPClientError
# 423 - RFC 4918
HAS_BODY: bool
end
class HTTPFailedDependency < HTTPClientError
# 424 - RFC 4918
HAS_BODY: bool
end
class HTTPUpgradeRequired < HTTPClientError
# 425 Unordered Collection - existed only in draft
# 426 - RFC 2817
HAS_BODY: bool
end
class HTTPPreconditionRequired < HTTPClientError
# 428 - RFC 6585
HAS_BODY: bool
end
class HTTPTooManyRequests < HTTPClientError
# 429 - RFC 6585
HAS_BODY: bool
end
class HTTPRequestHeaderFieldsTooLarge < HTTPClientError
# 431 - RFC 6585
HAS_BODY: bool
end
class HTTPUnavailableForLegalReasons < HTTPClientError
# 451 - RFC 7725
HAS_BODY: bool
end
class HTTPInternalServerError < HTTPServerError
# 500
HAS_BODY: bool
end
class HTTPNotImplemented < HTTPServerError
# 501
HAS_BODY: bool
end
class HTTPBadGateway < HTTPServerError
# 502
HAS_BODY: bool
end
class HTTPServiceUnavailable < HTTPServerError
# 503
HAS_BODY: bool
end
class HTTPGatewayTimeout < HTTPServerError
# 504
HAS_BODY: bool
end
# HTTPGatewayTimeOut: untyped
class HTTPVersionNotSupported < HTTPServerError
# 505
HAS_BODY: bool
end
class HTTPVariantAlsoNegotiates < HTTPServerError
# 506
HAS_BODY: bool
end
class HTTPInsufficientStorage < HTTPServerError
# 507 - RFC 4918
HAS_BODY: bool
end
class HTTPLoopDetected < HTTPServerError
# 508 - RFC 5842
HAS_BODY: bool
end
class HTTPNotExtended < HTTPServerError
# 509 Bandwidth Limit Exceeded - Apache bw/limited extension
# 510 - RFC 2774
HAS_BODY: bool
end
class HTTPNetworkAuthenticationRequired < HTTPServerError
# 511 - RFC 6585
HAS_BODY: bool
end
class HTTPResponse
CODE_CLASS_TO_OBJ: Hash[untyped, untyped]
CODE_TO_OBJ: Hash[untyped, untyped]
end
HTTP::STATUS_CODES: Hash[Integer, String]
module HTTPExceptions
def initialize: (untyped msg, untyped res) -> untyped
attr_reader response: untyped
alias data response
end
class HTTPError < ProtocolError
include Net::HTTPExceptions
end
class HTTPRetriableError < ProtoRetriableError
include Net::HTTPExceptions
end
class HTTPServerException < ProtoServerError
# We cannot use the name "HTTPServerError", it is the name of the response.
include Net::HTTPExceptions
end
# for compatibility
# Net::HTTPClientException: untyped
class HTTPFatalError < ProtoFatalError
include Net::HTTPExceptions
end
end