Method: Net::HTTP.start

Defined in:
lib/net/http.rb

.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 and port, see Net::HTTP.new.

  • For proxy-defining arguments p_addr through p_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.



1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
# File 'lib/net/http.rb', line 1045

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