Class: Net::HTTP
- Inherits:
-
Protocol
- Object
- Protocol
- Net::HTTP
- Defined in:
- lib/net/http.rb,
lib/net/http/backward.rb
Overview
:enddoc:
Defined Under Namespace
Modules: ProxyDelta Classes: Copy, Delete, Get, Head, Lock, Mkcol, Move, Options, Patch, Post, Propfind, Proppatch, Put, Trace, Unlock
Constant Summary collapse
- VERSION =
:stopdoc:
"0.5.0"
- HTTPVersion =
'1.1'
- SSL_ATTRIBUTES =
[ :ca_file, :ca_path, :cert, :cert_store, :ciphers, :extra_chain_cert, :key, :ssl_timeout, :ssl_version, :min_version, :max_version, :verify_callback, :verify_depth, :verify_mode, :verify_hostname, ]
- SSL_IVNAMES =
:nodoc:
SSL_ATTRIBUTES.map { |a| "@#{a}".to_sym }
- STATUS_CODES =
{ 100 => 'Continue', 101 => 'Switching Protocols', 102 => 'Processing', 103 => 'Early Hints', 200 => 'OK', 201 => 'Created', 202 => 'Accepted', 203 => 'Non-Authoritative Information', 204 => 'No Content', 205 => 'Reset Content', 206 => 'Partial Content', 207 => 'Multi-Status', 208 => 'Already Reported', 226 => 'IM Used', 300 => 'Multiple Choices', 301 => 'Moved Permanently', 302 => 'Found', 303 => 'See Other', 304 => 'Not Modified', 305 => 'Use Proxy', 307 => 'Temporary Redirect', 308 => 'Permanent Redirect', 400 => 'Bad Request', 401 => 'Unauthorized', 402 => 'Payment Required', 403 => 'Forbidden', 404 => 'Not Found', 405 => 'Method Not Allowed', 406 => 'Not Acceptable', 407 => 'Proxy Authentication Required', 408 => 'Request Timeout', 409 => 'Conflict', 410 => 'Gone', 411 => 'Length Required', 412 => 'Precondition Failed', 413 => 'Content Too Large', 414 => 'URI Too Long', 415 => 'Unsupported Media Type', 416 => 'Range Not Satisfiable', 417 => 'Expectation Failed', 421 => 'Misdirected Request', 422 => 'Unprocessable Content', 423 => 'Locked', 424 => 'Failed Dependency', 425 => 'Too Early', 426 => 'Upgrade Required', 428 => 'Precondition Required', 429 => 'Too Many Requests', 431 => 'Request Header Fields Too Large', 451 => 'Unavailable For Legal Reasons', 500 => 'Internal Server Error', 501 => 'Not Implemented', 502 => 'Bad Gateway', 503 => 'Service Unavailable', 504 => 'Gateway Timeout', 505 => 'HTTP Version Not Supported', 506 => 'Variant Also Negotiates', 507 => 'Insufficient Storage', 508 => 'Loop Detected', 510 => 'Not Extended (OBSOLETED)', 511 => 'Network Authentication Required', }
- ProxyMod =
ProxyDelta
Class Attribute Summary collapse
-
.default_configuration ⇒ Object
Allows to set the default configuration that will be used when creating a new connection.
-
.proxy_address ⇒ Object
readonly
Returns the address of the proxy host, or
nil
if none; see Net::HTTP@Proxy+Server. -
.proxy_pass ⇒ Object
readonly
Returns the password for accessing the proxy, or
nil
if none; see Net::HTTP@Proxy+Server. -
.proxy_port ⇒ Object
readonly
Returns the port number of the proxy host, or
nil
if none; see Net::HTTP@Proxy+Server. -
.proxy_use_ssl ⇒ Object
readonly
Use SSL when talking to the proxy.
-
.proxy_user ⇒ Object
readonly
Returns the user name for accessing the proxy, or
nil
if none; see Net::HTTP@Proxy+Server.
Instance Attribute Summary collapse
-
#address ⇒ Object
readonly
Returns the string host name or host IP given as argument
address
in ::new. -
#ca_file ⇒ Object
Sets or returns the path to a CA certification file in PEM format.
-
#ca_path ⇒ Object
Sets or returns the path of to CA directory containing certification files in PEM format.
-
#cert ⇒ Object
Sets or returns the OpenSSL::X509::Certificate object to be used for client certification.
-
#cert_store ⇒ Object
Sets or returns the X509::Store to be used for verifying peer certificate.
-
#ciphers ⇒ Object
Sets or returns the available SSL ciphers.
-
#close_on_empty_response ⇒ Object
Sets or returns whether to close the connection when the response is empty; initially
false
. -
#continue_timeout ⇒ Object
Returns the continue timeout value; see continue_timeout=.
-
#extra_chain_cert ⇒ Object
Sets or returns the extra X509 certificates to be added to the certificate chain.
-
#ignore_eof ⇒ Object
Sets or returns whether to ignore end-of-file when reading a response body with
Content-Length
headers; initiallytrue
. -
#keep_alive_timeout ⇒ Object
Sets or returns the numeric (Integer or Float) number of seconds to keep the connection open after a request is sent; initially 2.
-
#key ⇒ Object
Sets or returns the OpenSSL::PKey::RSA or OpenSSL::PKey::DSA object.
-
#local_host ⇒ Object
Sets or returns the string local host used to establish the connection; initially
nil
. -
#local_port ⇒ Object
Sets or returns the integer local port used to establish the connection; initially
nil
. -
#max_retries ⇒ Object
Returns the maximum number of times to retry an idempotent request; see #max_retries=.
-
#max_version ⇒ Object
Sets or returns the maximum SSL version.
-
#min_version ⇒ Object
Sets or returns the minimum SSL version.
-
#open_timeout ⇒ Object
Sets or returns the numeric (Integer or Float) number of seconds to wait for a connection to open; initially 60.
-
#port ⇒ Object
readonly
Returns the integer port number given as argument
port
in ::new. -
#proxy_address ⇒ Object
(also: #proxyaddr)
Returns the address of the proxy server, if defined,
nil
otherwise; see Proxy Server. -
#proxy_from_env ⇒ Object
writeonly
Sets whether to determine the proxy from environment variable ‘
ENV['http_proxy']
’; see Proxy Using ENV[‘http_proxy’]. -
#proxy_pass ⇒ Object
Returns the password of the proxy server, if defined,
nil
otherwise; see Proxy Server. -
#proxy_port ⇒ Object
(also: #proxyport)
Returns the port number of the proxy server, if defined,
nil
otherwise; see Proxy Server. -
#proxy_use_ssl ⇒ Object
writeonly
Sets the attribute proxy_use_ssl.
-
#proxy_user ⇒ Object
Returns the user name of the proxy server, if defined,
nil
otherwise; see Proxy Server. -
#read_timeout ⇒ Object
Returns the numeric (Integer or Float) number of seconds to wait for one block to be read (via one read(2) call); see #read_timeout=.
-
#response_body_encoding ⇒ Object
Returns the encoding to use for the response body; see #response_body_encoding=.
-
#ssl_timeout ⇒ Object
Sets or returns the SSL timeout seconds.
-
#ssl_version ⇒ Object
Sets or returns the SSL version.
-
#verify_callback ⇒ Object
Sets or returns the callback for the server certification verification.
-
#verify_depth ⇒ Object
Sets or returns the maximum depth for the certificate chain verification.
-
#verify_hostname ⇒ Object
Sets or returns whether to verify that the server certificate is valid for the hostname.
-
#verify_mode ⇒ Object
Sets or returns the flags for server the certification verification at the beginning of the SSL/TLS session.
-
#write_timeout ⇒ Object
Returns the numeric (Integer or Float) number of seconds to wait for one block to be written (via one write(2) call); see #write_timeout=.
Class Method Summary collapse
-
.default_port ⇒ Object
Returns integer
80
, the default port to use for HTTP requests:. -
.get(uri_or_host, path_or_headers = nil, port = nil) ⇒ Object
:call-seq: Net::HTTP.get(hostname, path, port = 80) -> body Net::HTTP:get(uri, headers = {}, port = uri.port) -> body.
-
.get_print(uri_or_host, path_or_headers = nil, port = nil) ⇒ Object
:call-seq: Net::HTTP.get_print(hostname, path, port = 80) -> nil Net::HTTP:get_print(uri, headers = {}, port = uri.port) -> nil.
-
.get_response(uri_or_host, path_or_headers = nil, port = nil, &block) ⇒ Object
:call-seq: Net::HTTP.get_response(hostname, path, port = 80) -> http_response Net::HTTP:get_response(uri, headers = {}, port = uri.port) -> http_response.
-
.http_default_port ⇒ Object
Returns integer
80
, the default port to use for HTTP requests:. -
.https_default_port ⇒ Object
Returns integer
443
, the default port to use for HTTPS requests:. -
.new(address, port = nil, p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil, p_no_proxy = nil, p_use_ssl = nil) ⇒ Object
Returns a new Net::HTTP object
http
(but does not open a TCP connection or HTTP session). -
.newobj ⇒ Object
:nodoc:.
-
.post(url, data, header = nil) ⇒ Object
Posts data to a host; returns a Net::HTTPResponse object.
-
.post_form(url, params) ⇒ Object
Posts data to a host; returns a Net::HTTPResponse object.
-
.Proxy(p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil, p_use_ssl = nil) ⇒ Object
Creates an HTTP proxy class which behaves like Net::HTTP, but performs all access via the specified proxy.
-
.proxy_class? ⇒ Boolean
Returns true if self is a class which was created by HTTP::Proxy.
-
.put(url, data, header = nil) ⇒ Object
Sends a PUT request to the server; returns a Net::HTTPResponse object.
-
.socket_type ⇒ Object
:nodoc: obsolete.
-
.start(address, *arg, &block) ⇒ Object
:call-seq: HTTP.start(address, port = nil, p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil, opts) -> http HTTP.start(address, port = nil, p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil, opts) {|http| … } -> object.
-
.version_1_1? ⇒ Boolean
(also: is_version_1_1?)
Returns
false
; retained for compatibility. -
.version_1_2 ⇒ Object
Returns
true
; retained for compatibility. -
.version_1_2? ⇒ Boolean
(also: is_version_1_2?)
Returns
true
; retained for compatibility.
Instance Method Summary collapse
-
#copy(path, initheader = nil) ⇒ Object
Sends a COPY request to the server; returns an instance of a subclass of Net::HTTPResponse.
-
#delete(path, initheader = {'Depth' => 'Infinity'}) ⇒ Object
Sends a DELETE request to the server; returns an instance of a subclass of Net::HTTPResponse.
-
#finish ⇒ Object
Finishes the HTTP session:.
-
#get(path, initheader = nil, dest = nil, &block) ⇒ Object
:call-seq: get(path, initheader = nil) {|res| … }.
-
#head(path, initheader = nil) ⇒ Object
Sends a HEAD request to the server; returns an instance of a subclass of Net::HTTPResponse.
-
#initialize(address, port = nil) ⇒ HTTP
constructor
Creates a new Net::HTTP object for the specified server address, without opening the TCP connection or initializing the HTTP session.
-
#inspect ⇒ Object
Returns a string representation of
self
:. -
#ipaddr ⇒ Object
Returns the IP address for the connection.
-
#ipaddr=(addr) ⇒ Object
Sets the IP address for the connection:.
-
#lock(path, body, initheader = nil) ⇒ Object
Sends a LOCK request to the server; returns an instance of a subclass of Net::HTTPResponse.
-
#mkcol(path, body = nil, initheader = nil) ⇒ Object
Sends a MKCOL request to the server; returns an instance of a subclass of Net::HTTPResponse.
-
#move(path, initheader = nil) ⇒ Object
Sends a MOVE request to the server; returns an instance of a subclass of Net::HTTPResponse.
-
#options(path, initheader = nil) ⇒ Object
Sends an Options request to the server; returns an instance of a subclass of Net::HTTPResponse.
-
#patch(path, data, initheader = nil, dest = nil, &block) ⇒ Object
:call-seq: patch(path, data, initheader = nil) {|res| … }.
-
#peer_cert ⇒ Object
Returns the X509 certificate chain (an array of strings) for the session’s socket peer, or
nil
if none. -
#post(path, data, initheader = nil, dest = nil, &block) ⇒ Object
:call-seq: post(path, data, initheader = nil) {|res| … }.
-
#propfind(path, body = nil, initheader = {'Depth' => '0'}) ⇒ Object
Sends a PROPFIND request to the server; returns an instance of a subclass of Net::HTTPResponse.
-
#proppatch(path, body, initheader = nil) ⇒ Object
Sends a PROPPATCH request to the server; returns an instance of a subclass of Net::HTTPResponse.
-
#proxy? ⇒ Boolean
Returns
true
if a proxy server is defined,false
otherwise; see Proxy Server. -
#proxy_from_env? ⇒ Boolean
Returns
true
if the proxy server is defined in the environment,false
otherwise; see Proxy Server. -
#proxy_uri ⇒ Object
The proxy URI determined from the environment for this connection.
-
#put(path, data, initheader = nil) ⇒ Object
Sends a PUT request to the server; returns an instance of a subclass of Net::HTTPResponse.
-
#request(req, body = nil, &block) ⇒ Object
Sends the given request
req
to the server; forms the response into a Net::HTTPResponse object. -
#request_get(path, initheader = nil, &block) ⇒ Object
(also: #get2)
Sends a GET request to the server; forms the response into a Net::HTTPResponse object.
-
#request_head(path, initheader = nil, &block) ⇒ Object
(also: #head2)
Sends a HEAD request to the server; returns an instance of a subclass of Net::HTTPResponse.
-
#request_post(path, data, initheader = nil, &block) ⇒ Object
(also: #post2)
Sends a POST request to the server; forms the response into a Net::HTTPResponse object.
-
#request_put(path, data, initheader = nil, &block) ⇒ Object
(also: #put2)
Sends a PUT request to the server; returns an instance of a subclass of Net::HTTPResponse.
-
#send_request(name, path, data = nil, header = nil) ⇒ Object
Sends an HTTP request to the server; returns an instance of a subclass of Net::HTTPResponse.
-
#set_debug_output(output) ⇒ Object
WARNING This method opens a serious security hole.
-
#start ⇒ Object
Starts an HTTP session.
-
#started? ⇒ Boolean
(also: #active?)
Returns
true
if the HTTP session has been started:. -
#trace(path, initheader = nil) ⇒ Object
Sends a TRACE request to the server; returns an instance of a subclass of Net::HTTPResponse.
-
#unlock(path, body, initheader = nil) ⇒ Object
Sends an UNLOCK request to the server; returns an instance of a subclass of Net::HTTPResponse.
-
#use_ssl=(flag) ⇒ Object
Sets whether a new session is to use Transport Layer Security:.
-
#use_ssl? ⇒ Boolean
Returns
true
ifself
uses SSL,false
otherwise.
Constructor Details
#initialize(address, port = nil) ⇒ HTTP
Creates a new Net::HTTP object for the specified server address, without opening the TCP connection or initializing the HTTP session. The address
should be a DNS hostname or IP address.
1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 |
# File 'lib/net/http.rb', line 1154 def initialize(address, port = nil) # :nodoc: defaults = { keep_alive_timeout: 2, close_on_empty_response: false, open_timeout: 60, read_timeout: 60, write_timeout: 60, continue_timeout: nil, max_retries: 1, debug_output: nil, response_body_encoding: false, ignore_eof: true } = defaults.merge(self.class.default_configuration || {}) @address = address @port = (port || HTTP.default_port) @ipaddr = nil @local_host = nil @local_port = nil @curr_http_version = HTTPVersion @keep_alive_timeout = [:keep_alive_timeout] @last_communicated = nil @close_on_empty_response = [:close_on_empty_response] @socket = nil @started = false @open_timeout = [:open_timeout] @read_timeout = [:read_timeout] @write_timeout = [:write_timeout] @continue_timeout = [:continue_timeout] @max_retries = [:max_retries] @debug_output = [:debug_output] @response_body_encoding = [:response_body_encoding] @ignore_eof = [:ignore_eof] @proxy_from_env = false @proxy_uri = nil @proxy_address = nil @proxy_port = nil @proxy_user = nil @proxy_pass = nil @proxy_use_ssl = nil @use_ssl = false @ssl_context = nil @ssl_session = nil @sspi_enabled = false SSL_IVNAMES.each do |ivname| instance_variable_set ivname, nil end end |
Class Attribute Details
.default_configuration ⇒ Object
1148 1149 1150 |
# File 'lib/net/http.rb', line 1148 def default_configuration @default_configuration end |
.proxy_address ⇒ Object (readonly)
Returns the address of the proxy host, or nil
if none; see Net::HTTP@Proxy+Server.
1838 1839 1840 |
# File 'lib/net/http.rb', line 1838 def proxy_address @proxy_address end |
.proxy_pass ⇒ Object (readonly)
Returns the password for accessing the proxy, or nil
if none; see Net::HTTP@Proxy+Server.
1850 1851 1852 |
# File 'lib/net/http.rb', line 1850 def proxy_pass @proxy_pass end |
.proxy_port ⇒ Object (readonly)
Returns the port number of the proxy host, or nil
if none; see Net::HTTP@Proxy+Server.
1842 1843 1844 |
# File 'lib/net/http.rb', line 1842 def proxy_port @proxy_port end |
.proxy_use_ssl ⇒ Object (readonly)
Use SSL when talking to the proxy. If Net::HTTP does not use a proxy, nil.
1853 1854 1855 |
# File 'lib/net/http.rb', line 1853 def proxy_use_ssl @proxy_use_ssl end |
.proxy_user ⇒ Object (readonly)
Returns the user name for accessing the proxy, or nil
if none; see Net::HTTP@Proxy+Server.
1846 1847 1848 |
# File 'lib/net/http.rb', line 1846 def proxy_user @proxy_user end |
Instance Attribute Details
#address ⇒ Object (readonly)
Returns the string host name or host IP given as argument address
in ::new.
1270 1271 1272 |
# File 'lib/net/http.rb', line 1270 def address @address end |
#ca_file ⇒ Object
Sets or returns the path to a CA certification file in PEM format.
1541 1542 1543 |
# File 'lib/net/http.rb', line 1541 def ca_file @ca_file end |
#ca_path ⇒ Object
Sets or returns the path of to CA directory containing certification files in PEM format.
1545 1546 1547 |
# File 'lib/net/http.rb', line 1545 def ca_path @ca_path end |
#cert ⇒ Object
Sets or returns the OpenSSL::X509::Certificate object to be used for client certification.
1549 1550 1551 |
# File 'lib/net/http.rb', line 1549 def cert @cert end |
#cert_store ⇒ Object
Sets or returns the X509::Store to be used for verifying peer certificate.
1552 1553 1554 |
# File 'lib/net/http.rb', line 1552 def cert_store @cert_store end |
#ciphers ⇒ Object
Sets or returns the available SSL ciphers. See OpenSSL::SSL::SSLContext#ciphers=.
1556 1557 1558 |
# File 'lib/net/http.rb', line 1556 def ciphers @ciphers end |
#close_on_empty_response ⇒ Object
Sets or returns whether to close the connection when the response is empty; initially false
.
1498 1499 1500 |
# File 'lib/net/http.rb', line 1498 def close_on_empty_response @close_on_empty_response end |
#continue_timeout ⇒ Object
Returns the continue timeout value; see continue_timeout=.
1451 1452 1453 |
# File 'lib/net/http.rb', line 1451 def continue_timeout @continue_timeout end |
#extra_chain_cert ⇒ Object
Sets or returns the extra X509 certificates to be added to the certificate chain. See OpenSSL::SSL::SSLContext#add_certificate.
1560 1561 1562 |
# File 'lib/net/http.rb', line 1560 def extra_chain_cert @extra_chain_cert end |
#ignore_eof ⇒ Object
Sets or returns whether to ignore end-of-file when reading a response body with Content-Length
headers; initially true
.
1474 1475 1476 |
# File 'lib/net/http.rb', line 1474 def ignore_eof @ignore_eof end |
#keep_alive_timeout ⇒ Object
Sets or returns the numeric (Integer or Float) number of seconds to keep the connection open after a request is sent; initially 2. If a new request is made during the given interval, the still-open connection is used; otherwise the connection will have been closed and a new connection is opened.
1469 1470 1471 |
# File 'lib/net/http.rb', line 1469 def keep_alive_timeout @keep_alive_timeout end |
#key ⇒ Object
Sets or returns the OpenSSL::PKey::RSA or OpenSSL::PKey::DSA object.
1563 1564 1565 |
# File 'lib/net/http.rb', line 1563 def key @key end |
#local_host ⇒ Object
Sets or returns the string local host used to establish the connection; initially nil
.
1277 1278 1279 |
# File 'lib/net/http.rb', line 1277 def local_host @local_host end |
#local_port ⇒ Object
Sets or returns the integer local port used to establish the connection; initially nil
.
1281 1282 1283 |
# File 'lib/net/http.rb', line 1281 def local_port @local_port end |
#max_retries ⇒ Object
Returns the maximum number of times to retry an idempotent request; see #max_retries=.
1407 1408 1409 |
# File 'lib/net/http.rb', line 1407 def max_retries @max_retries end |
#max_version ⇒ Object
Sets or returns the maximum SSL version. See OpenSSL::SSL::SSLContext#max_version=.
1578 1579 1580 |
# File 'lib/net/http.rb', line 1578 def max_version @max_version end |
#min_version ⇒ Object
Sets or returns the minimum SSL version. See OpenSSL::SSL::SSLContext#min_version=.
1574 1575 1576 |
# File 'lib/net/http.rb', line 1574 def min_version @min_version end |
#open_timeout ⇒ Object
Sets or returns the numeric (Integer or Float) number of seconds to wait for a connection to open; initially 60. If the connection is not made in the given interval, an exception is raised.
1373 1374 1375 |
# File 'lib/net/http.rb', line 1373 def open_timeout @open_timeout end |
#port ⇒ Object (readonly)
Returns the integer port number given as argument port
in ::new.
1273 1274 1275 |
# File 'lib/net/http.rb', line 1273 def port @port end |
#proxy_address ⇒ Object Also known as: proxyaddr
Returns the address of the proxy server, if defined, nil
otherwise; see Proxy Server.
1880 1881 1882 1883 1884 1885 1886 |
# File 'lib/net/http.rb', line 1880 def proxy_address if @proxy_from_env then proxy_uri&.hostname else @proxy_address end end |
#proxy_from_env=(value) ⇒ Object (writeonly)
Sets whether to determine the proxy from environment variable ‘ENV['http_proxy']
’; see Proxy Using ENV[‘http_proxy’].
1313 1314 1315 |
# File 'lib/net/http.rb', line 1313 def proxy_from_env=(value) @proxy_from_env = value end |
#proxy_pass ⇒ Object
Returns the password of the proxy server, if defined, nil
otherwise; see Proxy Server.
1911 1912 1913 1914 1915 1916 1917 1918 |
# File 'lib/net/http.rb', line 1911 def proxy_pass if @proxy_from_env pass = proxy_uri&.password unescape(pass) if pass else @proxy_pass end end |
#proxy_port ⇒ Object Also known as: proxyport
Returns the port number of the proxy server, if defined, nil
otherwise; see Proxy Server.
1890 1891 1892 1893 1894 1895 1896 |
# File 'lib/net/http.rb', line 1890 def proxy_port if @proxy_from_env then proxy_uri&.port else @proxy_port end end |
#proxy_use_ssl=(value) ⇒ Object (writeonly)
Sets the attribute proxy_use_ssl
1330 1331 1332 |
# File 'lib/net/http.rb', line 1330 def proxy_use_ssl=(value) @proxy_use_ssl = value end |
#proxy_user ⇒ Object
Returns the user name of the proxy server, if defined, nil
otherwise; see Proxy Server.
1900 1901 1902 1903 1904 1905 1906 1907 |
# File 'lib/net/http.rb', line 1900 def proxy_user if @proxy_from_env user = proxy_uri&.user unescape(user) if user else @proxy_user end end |
#read_timeout ⇒ Object
Returns the numeric (Integer or Float) number of seconds to wait for one block to be read (via one read(2) call); see #read_timeout=.
1378 1379 1380 |
# File 'lib/net/http.rb', line 1378 def read_timeout @read_timeout end |
#response_body_encoding ⇒ Object
Returns the encoding to use for the response body; see #response_body_encoding=.
1285 1286 1287 |
# File 'lib/net/http.rb', line 1285 def response_body_encoding @response_body_encoding end |
#ssl_timeout ⇒ Object
Sets or returns the SSL timeout seconds.
1566 1567 1568 |
# File 'lib/net/http.rb', line 1566 def ssl_timeout @ssl_timeout end |
#ssl_version ⇒ Object
Sets or returns the SSL version. See OpenSSL::SSL::SSLContext#ssl_version=.
1570 1571 1572 |
# File 'lib/net/http.rb', line 1570 def ssl_version @ssl_version end |
#verify_callback ⇒ Object
Sets or returns the callback for the server certification verification.
1581 1582 1583 |
# File 'lib/net/http.rb', line 1581 def verify_callback @verify_callback end |
#verify_depth ⇒ Object
Sets or returns the maximum depth for the certificate chain verification.
1584 1585 1586 |
# File 'lib/net/http.rb', line 1584 def verify_depth @verify_depth end |
#verify_hostname ⇒ Object
Sets or returns whether to verify that the server certificate is valid for the hostname. See OpenSSL::SSL::SSLContext#verify_hostname=.
1594 1595 1596 |
# File 'lib/net/http.rb', line 1594 def verify_hostname @verify_hostname end |
#verify_mode ⇒ Object
Sets or returns the flags for server the certification verification at the beginning of the SSL/TLS session. OpenSSL::SSL::VERIFY_NONE or OpenSSL::SSL::VERIFY_PEER are acceptable.
1589 1590 1591 |
# File 'lib/net/http.rb', line 1589 def verify_mode @verify_mode end |
#write_timeout ⇒ Object
Returns the numeric (Integer or Float) number of seconds to wait for one block to be written (via one write(2) call); see #write_timeout=.
1383 1384 1385 |
# File 'lib/net/http.rb', line 1383 def write_timeout @write_timeout end |
Class Method Details
.default_port ⇒ Object
941 942 943 |
# File 'lib/net/http.rb', line 941 def HTTP.default_port http_default_port() end |
.get(uri_or_host, path_or_headers = nil, port = nil) ⇒ Object
:call-seq:
Net::HTTP.get(hostname, path, port = 80) -> body
Net::HTTP:get(uri, headers = {}, port = uri.port) -> body
Sends a GET request and returns the HTTP response body as a string.
With string arguments hostname
and path
:
hostname = 'jsonplaceholder.typicode.com'
path = '/todos/1'
puts Net::HTTP.get(hostname, path)
Output:
{
"userId": 1,
"id": 1,
"title": "delectus aut autem",
"completed": false
}
With URI object uri
and optional hash argument headers
:
uri = URI('https://jsonplaceholder.typicode.com/todos/1')
headers = {'Content-type' => 'application/json; charset=UTF-8'}
Net::HTTP.get(uri, headers)
Related:
-
Net::HTTP::Get: request class for HTTP method
GET
. -
Net::HTTP#get: convenience method for HTTP method
GET
.
810 811 812 |
# File 'lib/net/http.rb', line 810 def HTTP.get(uri_or_host, path_or_headers = nil, port = nil) get_response(uri_or_host, path_or_headers, port).body end |
.get_print(uri_or_host, path_or_headers = nil, port = nil) ⇒ Object
:call-seq:
Net::HTTP.get_print(hostname, path, port = 80) -> nil
Net::HTTP:get_print(uri, headers = {}, port = uri.port) -> nil
Like Net::HTTP.get, but writes the returned body to $stdout; returns nil
.
769 770 771 772 773 774 775 776 |
# File 'lib/net/http.rb', line 769 def HTTP.get_print(uri_or_host, path_or_headers = nil, port = nil) get_response(uri_or_host, path_or_headers, port) {|res| res.read_body do |chunk| $stdout.print chunk end } nil end |
.get_response(uri_or_host, path_or_headers = nil, port = nil, &block) ⇒ Object
:call-seq:
Net::HTTP.get_response(hostname, path, port = 80) -> http_response
Net::HTTP:get_response(uri, headers = {}, port = uri.port) -> http_response
Like Net::HTTP.get, but returns a Net::HTTPResponse object instead of the body string.
820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 |
# File 'lib/net/http.rb', line 820 def HTTP.get_response(uri_or_host, path_or_headers = nil, port = nil, &block) if path_or_headers && !path_or_headers.is_a?(Hash) host = uri_or_host path = path_or_headers new(host, port || HTTP.default_port).start {|http| return http.request_get(path, &block) } else uri = uri_or_host headers = path_or_headers start(uri.hostname, uri.port, :use_ssl => uri.scheme == 'https') {|http| return http.request_get(uri, headers, &block) } end end |
.http_default_port ⇒ Object
949 950 951 |
# File 'lib/net/http.rb', line 949 def HTTP.http_default_port 80 end |
.https_default_port ⇒ Object
957 958 959 |
# File 'lib/net/http.rb', line 957 def HTTP.https_default_port 443 end |
.new(address, port = nil, p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil, p_no_proxy = nil, p_use_ssl = nil) ⇒ Object
Returns a new Net::HTTP object http
(but does not open a TCP connection or HTTP session).
With only string argument address
given (and ENV['http_proxy']
undefined or nil
), the returned http
:
-
Has the given address.
-
Has the default port number, Net::HTTP.default_port (80).
-
Has no proxy.
Example:
http = Net::HTTP.new(hostname)
# => #<Net::HTTP jsonplaceholder.typicode.com:80 open=false>
http.address # => "jsonplaceholder.typicode.com"
http.port # => 80
http.proxy? # => false
With integer argument port
also given, the returned http
has the given port:
http = Net::HTTP.new(hostname, 8000)
# => #<Net::HTTP jsonplaceholder.typicode.com:8000 open=false>
http.port # => 8000
For proxy-defining arguments p_addr
through p_no_proxy
, see Proxy Server.
1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 |
# File 'lib/net/http.rb', line 1106 def HTTP.new(address, port = nil, p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil, p_no_proxy = nil, p_use_ssl = nil) http = super address, port if proxy_class? then # from Net::HTTP::Proxy() http.proxy_from_env = @proxy_from_env http.proxy_address = @proxy_address http.proxy_port = @proxy_port http.proxy_user = @proxy_user http.proxy_pass = @proxy_pass http.proxy_use_ssl = @proxy_use_ssl elsif p_addr == :ENV then http.proxy_from_env = true else if p_addr && p_no_proxy && !URI::Generic.use_proxy?(address, address, port, p_no_proxy) p_addr = nil p_port = nil end http.proxy_address = p_addr http.proxy_port = p_port || default_port http.proxy_user = p_user http.proxy_pass = p_pass http.proxy_use_ssl = p_use_ssl end http end |
.newobj ⇒ Object
:nodoc:
1074 |
# File 'lib/net/http.rb', line 1074 alias newobj new |
.post(url, data, header = nil) ⇒ Object
Posts data to a host; returns a Net::HTTPResponse object.
Argument url
must be a URL; argument data
must be a string:
_uri = uri.dup
_uri.path = '/posts'
data = '{"title": "foo", "body": "bar", "userId": 1}'
headers = {'content-type': 'application/json'}
res = Net::HTTP.post(_uri, data, headers) # => #<Net::HTTPCreated 201 Created readbody=true>
puts res.body
Output:
{
"title": "foo",
"body": "bar",
"userId": 1,
"id": 101
}
Related:
-
Net::HTTP::Post: request class for HTTP method
POST
. -
Net::HTTP#post: convenience method for HTTP method
POST
.
863 864 865 866 867 868 |
# File 'lib/net/http.rb', line 863 def HTTP.post(url, data, header = nil) start(url.hostname, url.port, :use_ssl => url.scheme == 'https' ) {|http| http.post(url, data, header) } end |
.post_form(url, params) ⇒ Object
Posts data to a host; returns a Net::HTTPResponse object.
Argument url
must be a URI; argument data
must be a hash:
_uri = uri.dup
_uri.path = '/posts'
data = {title: 'foo', body: 'bar', userId: 1}
res = Net::HTTP.post_form(_uri, data) # => #<Net::HTTPCreated 201 Created readbody=true>
puts res.body
Output:
{
"title": "foo",
"body": "bar",
"userId": "1",
"id": 101
}
890 891 892 893 894 895 896 897 898 |
# File 'lib/net/http.rb', line 890 def HTTP.post_form(url, params) req = Post.new(url) req.form_data = params req.basic_auth url.user, url.password if url.user start(url.hostname, url.port, :use_ssl => url.scheme == 'https' ) {|http| http.request(req) } end |
.Proxy(p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil, p_use_ssl = nil) ⇒ Object
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.
1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 |
# File 'lib/net/http.rb', line 1808 def HTTP.Proxy(p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil, p_use_ssl = nil) #:nodoc: return self unless p_addr Class.new(self) { @is_proxy_class = true if p_addr == :ENV then @proxy_from_env = true @proxy_address = nil @proxy_port = nil else @proxy_from_env = false @proxy_address = p_addr @proxy_port = p_port || default_port end @proxy_user = p_user @proxy_pass = p_pass @proxy_use_ssl = p_use_ssl } end |
.proxy_class? ⇒ Boolean
Returns true if self is a class which was created by HTTP::Proxy.
1832 1833 1834 |
# File 'lib/net/http.rb', line 1832 def proxy_class? defined?(@is_proxy_class) ? @is_proxy_class : false end |
.put(url, data, header = nil) ⇒ Object
Sends a PUT request to the server; returns a Net::HTTPResponse object.
Argument url
must be a URL; argument data
must be a string:
_uri = uri.dup
_uri.path = '/posts'
data = '{"title": "foo", "body": "bar", "userId": 1}'
headers = {'content-type': 'application/json'}
res = Net::HTTP.put(_uri, data, headers) # => #<Net::HTTPCreated 201 Created readbody=true>
puts res.body
Output:
{
"title": "foo",
"body": "bar",
"userId": 1,
"id": 101
}
Related:
-
Net::HTTP::Put: request class for HTTP method
PUT
. -
Net::HTTP#put: convenience method for HTTP method
PUT
.
926 927 928 929 930 931 |
# File 'lib/net/http.rb', line 926 def HTTP.put(url, data, header = nil) start(url.hostname, url.port, :use_ssl => url.scheme == 'https' ) {|http| http.put(url, data, header) } end |
.socket_type ⇒ Object
:nodoc: obsolete
961 962 963 |
# File 'lib/net/http.rb', line 961 def HTTP.socket_type #:nodoc: obsolete BufferedIO end |
.start(address, *arg, &block) ⇒ Object
:call-seq:
HTTP.start(address, port = nil, p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil, opts) -> http
HTTP.start(address, port = nil, p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil, opts) {|http| ... } -> object
Creates a new Net::HTTP object, http
, via Net::HTTP.new:
-
For arguments
address
andport
, see Net::HTTP.new. -
For proxy-defining arguments
p_addr
throughp_pass
, see Proxy Server. -
For argument
opts
, see below.
With no block given:
-
Calls
http.start
with no block (see #start), which opens a TCP connection and HTTP session. -
Returns
http
. -
The caller should call #finish to close the session:
http = Net::HTTP.start(hostname) http.started? # => true http.finish http.started? # => false
With a block given:
-
Calls
http.start
with the block (see #start), which:-
Opens a TCP connection and HTTP session.
-
Calls the block, which may make any number of requests to the host.
-
Closes the HTTP session and TCP connection on block exit.
-
Returns the block’s value
object
.
-
-
Returns
object
.
Example:
hostname = 'jsonplaceholder.typicode.com'
Net::HTTP.start(hostname) do |http|
puts http.get('/todos/1').body
puts http.get('/todos/2').body
end
Output:
{
"userId": 1,
"id": 1,
"title": "delectus aut autem",
"completed": false
}
{
"userId": 1,
"id": 2,
"title": "quis ut nam facilis et officia qui",
"completed": false
}
If the last argument given is a hash, it is the opts
hash, where each key is a method or accessor to be called, and its value is the value to be set.
The keys may include:
-
#ca_file
-
#ca_path
-
#cert
-
#cert_store
-
#ciphers
-
#close_on_empty_response
-
ipaddr
(calls #ipaddr=) -
#keep_alive_timeout
-
#key
-
#open_timeout
-
#read_timeout
-
#ssl_timeout
-
#ssl_version
-
use_ssl
(calls #use_ssl=) -
#verify_callback
-
#verify_depth
-
#verify_mode
-
#write_timeout
Note: If port
is nil
and opts[:use_ssl]
is a truthy value, the value passed to new
is Net::HTTP.https_default_port, not port
.
1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 |
# File 'lib/net/http.rb', line 1051 def HTTP.start(address, *arg, &block) # :yield: +http+ arg.pop if opt = Hash.try_convert(arg[-1]) port, p_addr, p_port, p_user, p_pass = *arg p_addr = :ENV if arg.size < 2 port = https_default_port if !port && opt && opt[:use_ssl] http = new(address, port, p_addr, p_port, p_user, p_pass) http.ipaddr = opt[:ipaddr] if opt && opt[:ipaddr] if opt if opt[:use_ssl] opt = {verify_mode: OpenSSL::SSL::VERIFY_PEER}.update(opt) end http.methods.grep(/\A(\w+)=\z/) do |meth| key = $1.to_sym opt.key?(key) or next http.__send__(meth, opt[key]) end end http.start(&block) end |
.version_1_1? ⇒ Boolean Also known as: is_version_1_1?
Returns false
; retained for compatibility.
754 755 756 |
# File 'lib/net/http.rb', line 754 def HTTP.version_1_1? #:nodoc: false end |
.version_1_2 ⇒ Object
Returns true
; retained for compatibility.
744 745 746 |
# File 'lib/net/http.rb', line 744 def HTTP.version_1_2 true end |
.version_1_2? ⇒ Boolean Also known as: is_version_1_2?
Returns true
; retained for compatibility.
749 750 751 |
# File 'lib/net/http.rb', line 749 def HTTP.version_1_2? true end |
Instance Method Details
#copy(path, initheader = nil) ⇒ Object
2201 2202 2203 |
# File 'lib/net/http.rb', line 2201 def copy(path, initheader = nil) request(Copy.new(path, initheader)) end |
#delete(path, initheader = {'Depth' => 'Infinity'}) ⇒ Object
2175 2176 2177 |
# File 'lib/net/http.rb', line 2175 def delete(path, initheader = {'Depth' => 'Infinity'}) request(Delete.new(path, initheader)) end |
#finish ⇒ Object
1776 1777 1778 1779 |
# File 'lib/net/http.rb', line 1776 def finish raise IOError, 'HTTP session not yet started' unless started? do_finish end |
#get(path, initheader = nil, dest = nil, &block) ⇒ Object
:call-seq:
get(path, initheader = nil) {|res| ... }
Sends a GET request to the server; returns an instance of a subclass of Net::HTTPResponse.
The request is based on the Net::HTTP::Get object created from string path
and initial headers hash initheader
.
With a block given, calls the block with the response body:
http = Net::HTTP.new(hostname)
http.get('/todos/1') do |res|
p res
end # => #<Net::HTTPOK 200 OK readbody=true>
Output:
"{\n \"userId\": 1,\n \"id\": 1,\n \"title\": \"delectus aut autem\",\n \"completed\": false\n}"
With no block given, simply returns the response object:
http.get('/') # => #<Net::HTTPOK 200 OK readbody=true>
Related:
-
Net::HTTP::Get: request class for HTTP method GET.
-
Net::HTTP.get: sends GET request, returns response body.
1987 1988 1989 1990 1991 1992 1993 1994 1995 |
# File 'lib/net/http.rb', line 1987 def get(path, initheader = nil, dest = nil, &block) # :yield: +body_segment+ res = nil request(Get.new(path, initheader)) {|r| r.read_body dest, &block res = r } res end |
#head(path, initheader = nil) ⇒ Object
Sends a HEAD request to the server; returns an instance of a subclass of Net::HTTPResponse.
The request is based on the Net::HTTP::Head object created from string path
and initial headers hash initheader
:
res = http.head('/todos/1') # => #<Net::HTTPOK 200 OK readbody=true>
res.body # => nil
res.to_hash.take(3)
# =>
[["date", ["Wed, 15 Feb 2023 15:25:42 GMT"]],
["content-type", ["application/json; charset=utf-8"]],
["connection", ["close"]]]
2011 2012 2013 |
# File 'lib/net/http.rb', line 2011 def head(path, initheader = nil) request(Head.new(path, initheader)) end |
#inspect ⇒ Object
1211 1212 1213 |
# File 'lib/net/http.rb', line 1211 def inspect "#<#{self.class} #{@address}:#{@port} open=#{started?}>" end |
#ipaddr ⇒ Object
Returns the IP address for the connection.
If the session has not been started, returns the value set by #ipaddr=, or nil
if it has not been set:
http = Net::HTTP.new(hostname)
http.ipaddr # => nil
http.ipaddr = '172.67.155.76'
http.ipaddr # => "172.67.155.76"
If the session has been started, returns the IP address from the socket:
http = Net::HTTP.new(hostname)
http.start
http.ipaddr # => "172.67.155.76"
http.finish
1351 1352 1353 |
# File 'lib/net/http.rb', line 1351 def ipaddr started? ? @socket.io.peeraddr[3] : @ipaddr end |
#ipaddr=(addr) ⇒ Object
1363 1364 1365 1366 |
# File 'lib/net/http.rb', line 1363 def ipaddr=(addr) raise IOError, "ipaddr value changed, but session already started" if started? @ipaddr = addr end |
#lock(path, body, initheader = nil) ⇒ Object
Sends a LOCK request to the server; returns an instance of a subclass of Net::HTTPResponse.
The request is based on the Net::HTTP::Lock object created from string path
, string body
, and initial headers hash initheader
.
data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}'
http = Net::HTTP.new(hostname)
http.lock('/todos/1', data)
2121 2122 2123 |
# File 'lib/net/http.rb', line 2121 def lock(path, body, initheader = nil) request(Lock.new(path, initheader), body) end |
#mkcol(path, body = nil, initheader = nil) ⇒ Object
Sends a MKCOL request to the server; returns an instance of a subclass of Net::HTTPResponse.
The request is based on the Net::HTTP::Mkcol object created from string path
, string body
, and initial headers hash initheader
.
data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}'
http.mkcol('/todos/1', data)
http = Net::HTTP.new(hostname)
2215 2216 2217 |
# File 'lib/net/http.rb', line 2215 def mkcol(path, body = nil, initheader = nil) request(Mkcol.new(path, initheader), body) end |
#move(path, initheader = nil) ⇒ Object
2188 2189 2190 |
# File 'lib/net/http.rb', line 2188 def move(path, initheader = nil) request(Move.new(path, initheader)) end |
#options(path, initheader = nil) ⇒ Object
2148 2149 2150 |
# File 'lib/net/http.rb', line 2148 def (path, initheader = nil) request(Options.new(path, initheader)) end |
#patch(path, data, initheader = nil, dest = nil, &block) ⇒ Object
:call-seq:
patch(path, data, initheader = nil) {|res| ... }
Sends a PATCH request to the server; returns an instance of a subclass of Net::HTTPResponse.
The request is based on the Net::HTTP::Patch object created from string path
, string data
, and initial headers hash initheader
.
With a block given, calls the block with the response body:
data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}'
http = Net::HTTP.new(hostname)
http.patch('/todos/1', data) do |res|
p res
end # => #<Net::HTTPOK 200 OK readbody=true>
Output:
"{\n \"userId\": 1,\n \"id\": 1,\n \"title\": \"delectus aut autem\",\n \"completed\": false,\n \"{\\\"userId\\\": 1, \\\"id\\\": 1, \\\"title\\\": \\\"delectus aut autem\\\", \\\"completed\\\": false}\": \"\"\n}"
With no block given, simply returns the response object:
http.patch('/todos/1', data) # => #<Net::HTTPCreated 201 Created readbody=true>
2074 2075 2076 |
# File 'lib/net/http.rb', line 2074 def patch(path, data, initheader = nil, dest = nil, &block) # :yield: +body_segment+ send_entity(path, data, initheader, dest, Patch, &block) end |
#peer_cert ⇒ Object
Returns the X509 certificate chain (an array of strings) for the session’s socket peer, or nil
if none.
1599 1600 1601 1602 1603 1604 |
# File 'lib/net/http.rb', line 1599 def peer_cert if not use_ssl? or not @socket return nil end @socket.io.peer_cert end |
#post(path, data, initheader = nil, dest = nil, &block) ⇒ Object
:call-seq:
post(path, data, initheader = nil) {|res| ... }
Sends a POST request to the server; returns an instance of a subclass of Net::HTTPResponse.
The request is based on the Net::HTTP::Post object created from string path
, string data
, and initial headers hash initheader
.
With a block given, calls the block with the response body:
data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}'
http = Net::HTTP.new(hostname)
http.post('/todos', data) do |res|
p res
end # => #<Net::HTTPCreated 201 Created readbody=true>
Output:
"{\n \"{\\\"userId\\\": 1, \\\"id\\\": 1, \\\"title\\\": \\\"delectus aut autem\\\", \\\"completed\\\": false}\": \"\",\n \"id\": 201\n}"
With no block given, simply returns the response object:
http.post('/todos', data) # => #<Net::HTTPCreated 201 Created readbody=true>
Related:
-
Net::HTTP::Post: request class for HTTP method POST.
-
Net::HTTP.post: sends POST request, returns response body.
2045 2046 2047 |
# File 'lib/net/http.rb', line 2045 def post(path, data, initheader = nil, dest = nil, &block) # :yield: +body_segment+ send_entity(path, data, initheader, dest, Post, &block) end |
#propfind(path, body = nil, initheader = {'Depth' => '0'}) ⇒ Object
Sends a PROPFIND request to the server; returns an instance of a subclass of Net::HTTPResponse.
The request is based on the Net::HTTP::Propfind object created from string path
, string body
, and initial headers hash initheader
.
data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}'
http = Net::HTTP.new(hostname)
http.propfind('/todos/1', data)
2162 2163 2164 |
# File 'lib/net/http.rb', line 2162 def propfind(path, body = nil, initheader = {'Depth' => '0'}) request(Propfind.new(path, initheader), body) end |
#proppatch(path, body, initheader = nil) ⇒ Object
Sends a PROPPATCH request to the server; returns an instance of a subclass of Net::HTTPResponse.
The request is based on the Net::HTTP::Proppatch object created from string path
, string body
, and initial headers hash initheader
.
data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}'
http = Net::HTTP.new(hostname)
http.proppatch('/todos/1', data)
2107 2108 2109 |
# File 'lib/net/http.rb', line 2107 def proppatch(path, body, initheader = nil) request(Proppatch.new(path, initheader), body) end |
#proxy? ⇒ Boolean
Returns true
if a proxy server is defined, false
otherwise; see Proxy Server.
1858 1859 1860 |
# File 'lib/net/http.rb', line 1858 def proxy? !!(@proxy_from_env ? proxy_uri : @proxy_address) end |
#proxy_from_env? ⇒ Boolean
Returns true
if the proxy server is defined in the environment, false
otherwise; see Proxy Server.
1865 1866 1867 |
# File 'lib/net/http.rb', line 1865 def proxy_from_env? @proxy_from_env end |
#proxy_uri ⇒ Object
The proxy URI determined from the environment for this connection.
1870 1871 1872 1873 1874 1875 1876 |
# File 'lib/net/http.rb', line 1870 def proxy_uri # :nodoc: return if @proxy_uri == false @proxy_uri ||= URI::HTTP.new( "http", nil, address, port, nil, nil, nil, nil, nil ).find_proxy || false @proxy_uri || nil end |
#put(path, data, initheader = nil) ⇒ Object
Sends a PUT request to the server; returns an instance of a subclass of Net::HTTPResponse.
The request is based on the Net::HTTP::Put object created from string path
, string data
, and initial headers hash initheader
.
data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}'
http = Net::HTTP.new(hostname)
http.put('/todos/1', data) # => #<Net::HTTPOK 200 OK readbody=true>
Related:
-
Net::HTTP::Put: request class for HTTP method PUT.
-
Net::HTTP.put: sends PUT request, returns response body.
2093 2094 2095 |
# File 'lib/net/http.rb', line 2093 def put(path, data, initheader = nil) request(Put.new(path, initheader), data) end |
#request(req, body = nil, &block) ⇒ Object
Sends the given request req
to the server; forms the response into a Net::HTTPResponse object.
The given req
must be an instance of a subclass of Net::HTTPRequest. Argument body
should be given only if needed for the request.
With no block given, returns the response object:
http = Net::HTTP.new(hostname)
req = Net::HTTP::Get.new('/todos/1')
http.request(req)
# => #<Net::HTTPOK 200 OK readbody=true>
req = Net::HTTP::Post.new('/todos')
http.request(req, 'xyzzy')
# => #<Net::HTTPCreated 201 Created readbody=true>
With a block given, calls the block with the response and returns the response:
req = Net::HTTP::Get.new('/todos/1')
http.request(req) do |res|
p res
end # => #<Net::HTTPOK 200 OK readbody=true>
Output:
#<Net::HTTPOK 200 OK readbody=false>
2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 |
# File 'lib/net/http.rb', line 2373 def request(req, body = nil, &block) # :yield: +response+ unless started? start { req['connection'] ||= 'close' return request(req, body, &block) } end if proxy_user() req.proxy_basic_auth proxy_user(), proxy_pass() unless use_ssl? end req.set_body_internal body res = transport_request(req, &block) if sspi_auth?(res) sspi_auth(req) res = transport_request(req, &block) end res end |
#request_get(path, initheader = nil, &block) ⇒ Object Also known as: get2
Sends a GET request to the server; forms the response into a Net::HTTPResponse object.
The request is based on the Net::HTTP::Get object created from string path
and initial headers hash initheader
.
With no block given, returns the response object:
http = Net::HTTP.new(hostname)
http.request_get('/todos') # => #<Net::HTTPOK 200 OK readbody=true>
With a block given, calls the block with the response object and returns the response object:
http.request_get('/todos') do |res|
p res
end # => #<Net::HTTPOK 200 OK readbody=true>
Output:
#<Net::HTTPOK 200 OK readbody=false>
2254 2255 2256 |
# File 'lib/net/http.rb', line 2254 def request_get(path, initheader = nil, &block) # :yield: +response+ request(Get.new(path, initheader), &block) end |
#request_head(path, initheader = nil, &block) ⇒ Object Also known as: head2
2267 2268 2269 |
# File 'lib/net/http.rb', line 2267 def request_head(path, initheader = nil, &block) request(Head.new(path, initheader), &block) end |
#request_post(path, data, initheader = nil, &block) ⇒ Object Also known as: post2
Sends a POST request to the server; forms the response into a Net::HTTPResponse object.
The request is based on the Net::HTTP::Post object created from string path
, string data
, and initial headers hash initheader
.
With no block given, returns the response object:
http = Net::HTTP.new(hostname)
http.post('/todos', 'xyzzy')
# => #<Net::HTTPCreated 201 Created readbody=true>
With a block given, calls the block with the response body and returns the response object:
http.post('/todos', 'xyzzy') do |res|
p res
end # => #<Net::HTTPCreated 201 Created readbody=true>
Output:
"{\n \"xyzzy\": \"\",\n \"id\": 201\n}"
2294 2295 2296 |
# File 'lib/net/http.rb', line 2294 def request_post(path, data, initheader = nil, &block) # :yield: +response+ request Post.new(path, initheader), data, &block end |
#request_put(path, data, initheader = nil, &block) ⇒ Object Also known as: put2
Sends a PUT request to the server; returns an instance of a subclass of Net::HTTPResponse.
The request is based on the Net::HTTP::Put object created from string path
, string data
, and initial headers hash initheader
.
http = Net::HTTP.new(hostname)
http.put('/todos/1', 'xyzzy')
# => #<Net::HTTPOK 200 OK readbody=true>
2308 2309 2310 |
# File 'lib/net/http.rb', line 2308 def request_put(path, data, initheader = nil, &block) #:nodoc: request Put.new(path, initheader), data, &block end |
#send_request(name, path, data = nil, header = nil) ⇒ Object
Sends an HTTP request to the server; returns an instance of a subclass of Net::HTTPResponse.
The request is based on the Net::HTTPRequest object created from string path
, string data
, and initial headers hash header
. That object is an instance of the subclass of Net::HTTPRequest, that corresponds to the given uppercase string name
, which must be an HTTP request method or a WebDAV request method.
Examples:
http = Net::HTTP.new(hostname)
http.send_request('GET', '/todos/1')
# => #<Net::HTTPOK 200 OK readbody=true>
http.send_request('POST', '/todos', 'xyzzy')
# => #<Net::HTTPCreated 201 Created readbody=true>
2337 2338 2339 2340 2341 |
# File 'lib/net/http.rb', line 2337 def send_request(name, path, data = nil, header = nil) has_response_body = name != 'HEAD' r = HTTPGenericRequest.new(name,(data ? true : false),has_response_body,path,header) request r, data end |
#set_debug_output(output) ⇒ Object
WARNING This method opens a serious security hole. Never use this method in production code.
Sets the output stream for debugging:
http = Net::HTTP.new(hostname)
File.open('t.tmp', 'w') do |file|
http.set_debug_output(file)
http.start
http.get('/nosuch/1')
http.finish
end
puts File.read('t.tmp')
Output:
opening connection to jsonplaceholder.typicode.com:80...
opened
<- "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"
-> "HTTP/1.1 404 Not Found\r\n"
-> "Date: Mon, 12 Dec 2022 21:14:11 GMT\r\n"
-> "Content-Type: application/json; charset=utf-8\r\n"
-> "Content-Length: 2\r\n"
-> "Connection: keep-alive\r\n"
-> "X-Powered-By: Express\r\n"
-> "X-Ratelimit-Limit: 1000\r\n"
-> "X-Ratelimit-Remaining: 999\r\n"
-> "X-Ratelimit-Reset: 1670879660\r\n"
-> "Vary: Origin, Accept-Encoding\r\n"
-> "Access-Control-Allow-Credentials: true\r\n"
-> "Cache-Control: max-age=43200\r\n"
-> "Pragma: no-cache\r\n"
-> "Expires: -1\r\n"
-> "X-Content-Type-Options: nosniff\r\n"
-> "Etag: W/\"2-vyGp6PvFo4RvsFtPoIWeCReyIC8\"\r\n"
-> "Via: 1.1 vegur\r\n"
-> "CF-Cache-Status: MISS\r\n"
-> "Server-Timing: cf-q-config;dur=1.3000000762986e-05\r\n"
-> "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"
-> "NEL: {\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}\r\n"
-> "Server: cloudflare\r\n"
-> "CF-RAY: 778977dc484ce591-DFW\r\n"
-> "alt-svc: h3=\":443\"; ma=86400, h3-29=\":443\"; ma=86400\r\n"
-> "\r\n"
reading 2 bytes...
-> "{}"
read 2 bytes
Conn keep-alive
1264 1265 1266 1267 |
# File 'lib/net/http.rb', line 1264 def set_debug_output(output) warn 'Net::HTTP#set_debug_output called after HTTP started', uplevel: 1 if started? @debug_output = output end |
#start ⇒ Object
Starts an HTTP session.
Without a block, returns self
:
http = Net::HTTP.new(hostname)
# => #<Net::HTTP jsonplaceholder.typicode.com:80 open=false>
http.start
# => #<Net::HTTP jsonplaceholder.typicode.com:80 open=true>
http.started? # => true
http.finish
With a block, calls the block with self
, finishes the session when the block exits, and returns the block’s value:
http.start do |http|
http
end
# => #<Net::HTTP jsonplaceholder.typicode.com:80 open=false>
http.started? # => false
1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 |
# File 'lib/net/http.rb', line 1627 def start # :yield: http raise IOError, 'HTTP session already opened' if @started if block_given? begin do_start return yield(self) ensure do_finish end end do_start self end |
#started? ⇒ Boolean Also known as: active?
1490 1491 1492 |
# File 'lib/net/http.rb', line 1490 def started? @started end |
#trace(path, initheader = nil) ⇒ Object
2228 2229 2230 |
# File 'lib/net/http.rb', line 2228 def trace(path, initheader = nil) request(Trace.new(path, initheader)) end |
#unlock(path, body, initheader = nil) ⇒ Object
Sends an UNLOCK request to the server; returns an instance of a subclass of Net::HTTPResponse.
The request is based on the Net::HTTP::Unlock object created from string path
, string body
, and initial headers hash initheader
.
data = '{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}'
http = Net::HTTP.new(hostname)
http.unlock('/todos/1', data)
2135 2136 2137 |
# File 'lib/net/http.rb', line 2135 def unlock(path, body, initheader = nil) request(Unlock.new(path, initheader), body) end |
#use_ssl=(flag) ⇒ Object
Sets whether a new session is to use Transport Layer Security:
Raises IOError if attempting to change during a session.
Raises OpenSSL::SSL::SSLError if the port is not an HTTPS port.
1512 1513 1514 1515 1516 1517 1518 |
# File 'lib/net/http.rb', line 1512 def use_ssl=(flag) flag = flag ? true : false if started? and @use_ssl != flag raise IOError, "use_ssl value changed, but session already started" end @use_ssl = flag end |
#use_ssl? ⇒ Boolean
Returns true
if self
uses SSL, false
otherwise. See Net::HTTP#use_ssl=.
1502 1503 1504 |
# File 'lib/net/http.rb', line 1502 def use_ssl? @use_ssl end |