class

HTTP::Client

Inherits Reference / Object

An HTTP Client.

NOTE: To use Client, you must explicitly import it with require "http/client"

One-shot usage

Without a block, an HTTP::Client::Response is returned and the response's body is available as a String by invoking HTTP::Client::Response#body.

require "http/client"

response = HTTP::Client.get "http://www.example.com"
response.status_code      # => 200
response.body.lines.first # => "<!doctype html>"

Parameters

Parameters can be added to any request with the URI::Params.encode method, which converts a Hash or NamedTuple to a URL encoded HTTP query.

require "http/client"

params = URI::Params.encode({"author" => "John Doe", "offset" => "20"}) # => "author=John+Doe&offset=20"
response = HTTP::Client.get URI.new("http", "www.example.com", query: params)
response.status_code # => 200

Streaming

With a block, an HTTP::Client::Response body is returned and the response's body is available as an IO by invoking HTTP::Client::Response#body_io.

require "http/client"

HTTP::Client.get("http://www.example.com") do |response|
  response.status_code  # => 200
  response.body_io.gets # => "<!doctype html>"
end

Reusing a connection

Similar to the above cases, but creating an instance of an HTTP::Client.

require "http/client"

client = HTTP::Client.new "www.example.com"
response = client.get "/"
response.status_code      # => 200
response.body.lines.first # => "<!doctype html>"
client.close

WARNING: A single HTTP::Client instance is not safe for concurrent use by multiple fibers.

Compression

If compress isn't set to false, and no Accept-Encoding header is explicitly specified, an HTTP::Client will add an "Accept-Encoding": "gzip, deflate" header, and automatically decompress the response body/body_io.

Encoding

If a response has a Content-Type header with a charset, that charset is set as the encoding of the returned IO (or used for creating a String for the body). Invalid bytes in the given encoding are silently ignored when reading text content.

Constants

Log = ::Log.for(self)

Constructors

new(host : String, port = nil, tls : TLSContext = nil)

Creates a new HTTP client with the given host, port and tls configurations. If no port is given, the default one will be used depending on the tls arguments: 80 for if tls is false, 443 if tls is truthy. If tls is true a new OpenSSL::SSL::Context::Client will be used, else the given one. In any case the active context can be accessed through tls.

Source
new(io : IO, host : String = "", port : Int32 = 80)

Creates a new HTTP client bound to an existing IO. host and port can be specified and they will be used to conform the Host header on each request. Instances created with this constructor cannot be reconnected. Once close is called explicitly or if the connection doesn't support keep-alive, the next call to make a request will raise an exception.

Source
new(uri : URI, tls : TLSContext = nil) : self

Creates a new HTTP client from a URI. Parses the host, port, and tls configuration from the URI provided. Port defaults to 80 if not specified unless using the https protocol, which defaults to port 443 and sets tls to true.

require "http/client"
require "uri"

uri = URI.parse("https://secure.example.com")
client = HTTP::Client.new(uri)

client.tls? # => #<OpenSSL::SSL::Context::Client>
client.get("/")

This constructor will ignore any path or query segments in the URI as those will need to be passed to the client when a request is made.

If tls is given it will be used, if not a new TLS context will be created. If tls is given and uri is a HTTP URI, ArgumentError is raised. In any case the active context can be accessed through tls.

This constructor will raise an exception if any scheme but HTTP or HTTPS is used.

Source
new(uri : URI, tls : TLSContext = nil, &)

Creates a new HTTP client from a URI, yields it to the block and closes the client afterwards. Parses the host, port, and tls configuration from the URI provided. Port defaults to 80 if not specified unless using the https protocol, which defaults to port 443 and sets tls to true.

require "http/client"
require "uri"

uri = URI.parse("https://secure.example.com")
HTTP::Client.new(uri) do |client|
  client.tls? # => #<OpenSSL::SSL::Context::Client>
  client.get("/")
end

This constructor will ignore any path or query segments in the URI as those will need to be passed to the client when a request is made.

If tls is given it will be used, if not a new TLS context will be created. If tls is given and uri is a HTTP URI, ArgumentError is raised. In any case the active context can be accessed through tls.

This constructor will raise an exception if any scheme but HTTP or HTTPS is used.

Source
new(host : String, port = nil, tls : TLSContext = nil, &)

Creates a new HTTP client, yields it to the block, and closes the client afterwards.

require "http/client"

HTTP::Client.new("www.example.com") do |client|
  client.get "/"
end
Source

Class methods

delete(url : String | URI, headers : HTTP::Headers | Nil = nil, body : BodyType = nil, tls : TLSContext = nil) : HTTP::Client::Response

Executes a DELETE request. The response will have its body as a String, accessed via HTTP::Client::Response#body.

require "http/client"

response = HTTP::Client.delete("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!")
response.body #=> "..."
Source
delete(url : String | URI, headers : HTTP::Headers | Nil = nil, body : BodyType = nil, tls : TLSContext = nil, &)

Executes a DELETE request and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io.

require "http/client"

HTTP::Client.delete("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!") do |response|
  response.body_io.gets #=> "..."
end
Source
delete(url, headers : HTTP::Headers | Nil = nil, tls : TLSContext = nil, *, form : String | IO | Hash) : HTTP::Client::Response

Executes a DELETE request with form data and returns a Response. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

response = HTTP::Client.delete "http://www.example.com", form: "foo=bar"
Source
delete(url, headers : HTTP::Headers | Nil = nil, tls : TLSContext = nil, *, form : String | IO | Hash, &)

Executes a DELETE request with form data and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

HTTP::Client.delete("http://www.example.com", form: "foo=bar") do |response|
  response.body_io.gets
end
Source
exec(method : String, url : String | URI, headers : HTTP::Headers | Nil = nil, body : BodyType = nil, tls : TLSContext = nil) : HTTP::Client::Response

Executes a request. The response will have its body as an IO accessed via HTTP::Client::Response#body_io.

require "http/client"

response = HTTP::Client.exec "GET", "http://www.example.com"
response.body # => "..."
Source
exec(method, url : String | URI, headers : HTTP::Headers | Nil = nil, body : BodyType = nil, tls : TLSContext = nil, &)

Executes a request. The response will have its body as an IO accessed via HTTP::Client::Response#body_io.

require "http/client"

HTTP::Client.exec("GET", "http://www.example.com") do |response|
  response.body_io.gets # => "..."
end
Source
get(url : String | URI, headers : HTTP::Headers | Nil = nil, body : BodyType = nil, tls : TLSContext = nil) : HTTP::Client::Response

Executes a GET request. The response will have its body as a String, accessed via HTTP::Client::Response#body.

require "http/client"

response = HTTP::Client.get("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!")
response.body #=> "..."
Source
get(url : String | URI, headers : HTTP::Headers | Nil = nil, body : BodyType = nil, tls : TLSContext = nil, &)

Executes a GET request and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io.

require "http/client"

HTTP::Client.get("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!") do |response|
  response.body_io.gets #=> "..."
end
Source
get(url, headers : HTTP::Headers | Nil = nil, tls : TLSContext = nil, *, form : String | IO | Hash) : HTTP::Client::Response

Executes a GET request with form data and returns a Response. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

response = HTTP::Client.get "http://www.example.com", form: "foo=bar"
Source
get(url, headers : HTTP::Headers | Nil = nil, tls : TLSContext = nil, *, form : String | IO | Hash, &)

Executes a GET request with form data and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

HTTP::Client.get("http://www.example.com", form: "foo=bar") do |response|
  response.body_io.gets
end
Source
head(url : String | URI, headers : HTTP::Headers | Nil = nil, body : BodyType = nil, tls : TLSContext = nil) : HTTP::Client::Response

Executes a HEAD request. The response will have its body as a String, accessed via HTTP::Client::Response#body.

require "http/client"

response = HTTP::Client.head("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!")
response.body #=> "..."
Source
head(url : String | URI, headers : HTTP::Headers | Nil = nil, body : BodyType = nil, tls : TLSContext = nil, &)

Executes a HEAD request and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io.

require "http/client"

HTTP::Client.head("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!") do |response|
  response.body_io.gets #=> "..."
end
Source
head(url, headers : HTTP::Headers | Nil = nil, tls : TLSContext = nil, *, form : String | IO | Hash) : HTTP::Client::Response

Executes a HEAD request with form data and returns a Response. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

response = HTTP::Client.head "http://www.example.com", form: "foo=bar"
Source
head(url, headers : HTTP::Headers | Nil = nil, tls : TLSContext = nil, *, form : String | IO | Hash, &)

Executes a HEAD request with form data and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

HTTP::Client.head("http://www.example.com", form: "foo=bar") do |response|
  response.body_io.gets
end
Source
options(url : String | URI, headers : HTTP::Headers | Nil = nil, body : BodyType = nil, tls : TLSContext = nil) : HTTP::Client::Response

Executes a OPTIONS request. The response will have its body as a String, accessed via HTTP::Client::Response#body.

require "http/client"

response = HTTP::Client.options("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!")
response.body #=> "..."
Source
options(url : String | URI, headers : HTTP::Headers | Nil = nil, body : BodyType = nil, tls : TLSContext = nil, &)

Executes a OPTIONS request and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io.

require "http/client"

HTTP::Client.options("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!") do |response|
  response.body_io.gets #=> "..."
end
Source
options(url, headers : HTTP::Headers | Nil = nil, tls : TLSContext = nil, *, form : String | IO | Hash) : HTTP::Client::Response

Executes a OPTIONS request with form data and returns a Response. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

response = HTTP::Client.options "http://www.example.com", form: "foo=bar"
Source
options(url, headers : HTTP::Headers | Nil = nil, tls : TLSContext = nil, *, form : String | IO | Hash, &)

Executes a OPTIONS request with form data and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

HTTP::Client.options("http://www.example.com", form: "foo=bar") do |response|
  response.body_io.gets
end
Source
patch(url : String | URI, headers : HTTP::Headers | Nil = nil, body : BodyType = nil, tls : TLSContext = nil) : HTTP::Client::Response

Executes a PATCH request. The response will have its body as a String, accessed via HTTP::Client::Response#body.

require "http/client"

response = HTTP::Client.patch("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!")
response.body #=> "..."
Source
patch(url : String | URI, headers : HTTP::Headers | Nil = nil, body : BodyType = nil, tls : TLSContext = nil, &)

Executes a PATCH request and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io.

require "http/client"

HTTP::Client.patch("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!") do |response|
  response.body_io.gets #=> "..."
end
Source
patch(url, headers : HTTP::Headers | Nil = nil, tls : TLSContext = nil, *, form : String | IO | Hash) : HTTP::Client::Response

Executes a PATCH request with form data and returns a Response. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

response = HTTP::Client.patch "http://www.example.com", form: "foo=bar"
Source
patch(url, headers : HTTP::Headers | Nil = nil, tls : TLSContext = nil, *, form : String | IO | Hash, &)

Executes a PATCH request with form data and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

HTTP::Client.patch("http://www.example.com", form: "foo=bar") do |response|
  response.body_io.gets
end
Source
post(url : String | URI, headers : HTTP::Headers | Nil = nil, body : BodyType = nil, tls : TLSContext = nil) : HTTP::Client::Response

Executes a POST request. The response will have its body as a String, accessed via HTTP::Client::Response#body.

require "http/client"

response = HTTP::Client.post("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!")
response.body #=> "..."
Source
post(url : String | URI, headers : HTTP::Headers | Nil = nil, body : BodyType = nil, tls : TLSContext = nil, &)

Executes a POST request and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io.

require "http/client"

HTTP::Client.post("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!") do |response|
  response.body_io.gets #=> "..."
end
Source
post(url, headers : HTTP::Headers | Nil = nil, tls : TLSContext = nil, *, form : String | IO | Hash) : HTTP::Client::Response

Executes a POST request with form data and returns a Response. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

response = HTTP::Client.post "http://www.example.com", form: "foo=bar"
Source
post(url, headers : HTTP::Headers | Nil = nil, tls : TLSContext = nil, *, form : String | IO | Hash, &)

Executes a POST request with form data and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

HTTP::Client.post("http://www.example.com", form: "foo=bar") do |response|
  response.body_io.gets
end
Source
put(url : String | URI, headers : HTTP::Headers | Nil = nil, body : BodyType = nil, tls : TLSContext = nil) : HTTP::Client::Response

Executes a PUT request. The response will have its body as a String, accessed via HTTP::Client::Response#body.

require "http/client"

response = HTTP::Client.put("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!")
response.body #=> "..."
Source
put(url : String | URI, headers : HTTP::Headers | Nil = nil, body : BodyType = nil, tls : TLSContext = nil, &)

Executes a PUT request and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io.

require "http/client"

HTTP::Client.put("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!") do |response|
  response.body_io.gets #=> "..."
end
Source
put(url, headers : HTTP::Headers | Nil = nil, tls : TLSContext = nil, *, form : String | IO | Hash) : HTTP::Client::Response

Executes a PUT request with form data and returns a Response. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

response = HTTP::Client.put "http://www.example.com", form: "foo=bar"
Source
put(url, headers : HTTP::Headers | Nil = nil, tls : TLSContext = nil, *, form : String | IO | Hash, &)

Executes a PUT request with form data and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

HTTP::Client.put("http://www.example.com", form: "foo=bar") do |response|
  response.body_io.gets
end
Source

Instance methods

basic_auth(username, password) : Nil

Configures this client to perform basic authentication in every request.

Source
before_request

Adds a callback to execute before each request. This is usually used to set an authorization header. Any number of callbacks can be added.

require "http/client"

client = HTTP::Client.new("www.example.com")
client.before_request do |request|
  request.headers["Authorization"] = "XYZ123"
end
client.get "/"
Source
close

Closes this client. If used again, a new connection will be opened.

Source
compress=(compress : Bool)

Whether automatic compression/decompression is enabled.

Source
compress?

Whether automatic compression/decompression is enabled.

Source
connect_timeout=(connect_timeout : Number)

Sets the number of seconds to wait when connecting, before raising an IO::TimeoutError.

require "http/client"

client = HTTP::Client.new("example.org")
client.connect_timeout = 1.5
begin
  response = client.get("/")
rescue IO::TimeoutError
  puts "Timeout!"
end
Source
connect_timeout=(connect_timeout : Time::Span | Nil)

Sets the open timeout with a Time::Span to wait when connecting, before raising an IO::TimeoutError.

require "http/client"

client = HTTP::Client.new("example.org")
client.connect_timeout = 5.minutes
begin
  response = client.get("/")
rescue IO::TimeoutError
  puts "Timeout!"
end
Source
delete(path, headers : HTTP::Headers | Nil = nil, body : BodyType = nil) : HTTP::Client::Response

Executes a DELETE request. The response will have its body as a String, accessed via HTTP::Client::Response#body.

require "http/client"

client = HTTP::Client.new("www.example.com")
response = client.delete("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!")
response.body #=> "..."
Source
delete(path, headers : HTTP::Headers | Nil = nil, body : BodyType = nil, &)

Executes a DELETE request and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io.

require "http/client"

client = HTTP::Client.new("www.example.com")
client.delete("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!") do |response|
  response.body_io.gets #=> "..."
end
Source
delete(path, headers : HTTP::Headers | Nil = nil, *, form : String | IO) : HTTP::Client::Response

Executes a DELETE request with form data and returns a Response. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
response = client.delete "/", form: "foo=bar"
Source
delete(path, headers : HTTP::Headers | Nil = nil, *, form : String | IO, &)

Executes a DELETE request with form data and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
client.delete("/", form: "foo=bar") do |response|
  response.body_io.gets
end
Source
delete(path, headers : HTTP::Headers | Nil = nil, *, form : Hash(String, String) | NamedTuple) : HTTP::Client::Response

Executes a DELETE request with form data and returns a Response. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
response = client.delete "/", form: {"foo" => "bar"}
Source
delete(path, headers : HTTP::Headers | Nil = nil, *, form : Hash(String, String) | NamedTuple, &)

Executes a DELETE request with form data and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io. The "Content-type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
client.delete("/", form: {"foo" => "bar"}) do |response|
  response.body_io.gets
end
Source
dns_timeout=(dns_timeout : Number)

Sets the number of seconds to wait when resolving a name, before raising an IO::TimeoutError.

NOTE: dns_timeout is currently only supported on Windows.

require "http/client"

client = HTTP::Client.new("example.org")
client.dns_timeout = 1.5
begin
  response = client.get("/")
rescue IO::TimeoutError
  puts "Timeout!"
end
Source
dns_timeout=(dns_timeout : Time::Span | Nil)

Sets the number of seconds to wait when resolving a name with a Time::Span, before raising an IO::TimeoutError.

NOTE: dns_timeout is currently only supported on Windows.

require "http/client"

client = HTTP::Client.new("example.org")
client.dns_timeout = 1.5.seconds
begin
  response = client.get("/")
rescue IO::TimeoutError
  puts "Timeout!"
end
Source
exec(method : String, path : String, headers : HTTP::Headers | Nil = nil, body : BodyType = nil) : HTTP::Client::Response

Executes a request. The response will have its body as a String, accessed via HTTP::Client::Response#body.

require "http/client"

client = HTTP::Client.new "www.example.com"
response = client.exec "GET", "/"
response.body # => "..."
Source

Executes a request. The response will have its body as a String, accessed via HTTP::Client::Response#body.

require "http/client"

client = HTTP::Client.new "www.example.com"
response = client.exec HTTP::Request.new("GET", "/")
response.body # => "..."
Source
exec(method : String, path, headers : HTTP::Headers | Nil = nil, body : BodyType = nil, &)

Executes a request. The response will have its body as an IO accessed via HTTP::Client::Response#body_io.

require "http/client"

client = HTTP::Client.new "www.example.com"
client.exec("GET", "/") do |response|
  response.body_io.gets # => "..."
end
Source
exec(request : HTTP::Request, &)

Executes a request and yields an HTTP::Client::Response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io.

require "http/client"

client = HTTP::Client.new "www.example.com"
client.exec(HTTP::Request.new("GET", "/")) do |response|
  response.body_io.gets # => "..."
end
Source
get(path, headers : HTTP::Headers | Nil = nil, body : BodyType = nil) : HTTP::Client::Response

Executes a GET request. The response will have its body as a String, accessed via HTTP::Client::Response#body.

require "http/client"

client = HTTP::Client.new("www.example.com")
response = client.get("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!")
response.body #=> "..."
Source
get(path, headers : HTTP::Headers | Nil = nil, body : BodyType = nil, &)

Executes a GET request and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io.

require "http/client"

client = HTTP::Client.new("www.example.com")
client.get("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!") do |response|
  response.body_io.gets #=> "..."
end
Source
get(path, headers : HTTP::Headers | Nil = nil, *, form : String | IO) : HTTP::Client::Response

Executes a GET request with form data and returns a Response. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
response = client.get "/", form: "foo=bar"
Source
get(path, headers : HTTP::Headers | Nil = nil, *, form : String | IO, &)

Executes a GET request with form data and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
client.get("/", form: "foo=bar") do |response|
  response.body_io.gets
end
Source
get(path, headers : HTTP::Headers | Nil = nil, *, form : Hash(String, String) | NamedTuple) : HTTP::Client::Response

Executes a GET request with form data and returns a Response. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
response = client.get "/", form: {"foo" => "bar"}
Source
get(path, headers : HTTP::Headers | Nil = nil, *, form : Hash(String, String) | NamedTuple, &)

Executes a GET request with form data and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io. The "Content-type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
client.get("/", form: {"foo" => "bar"}) do |response|
  response.body_io.gets
end
Source
head(path, headers : HTTP::Headers | Nil = nil, body : BodyType = nil) : HTTP::Client::Response

Executes a HEAD request. The response will have its body as a String, accessed via HTTP::Client::Response#body.

require "http/client"

client = HTTP::Client.new("www.example.com")
response = client.head("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!")
response.body #=> "..."
Source
head(path, headers : HTTP::Headers | Nil = nil, body : BodyType = nil, &)

Executes a HEAD request and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io.

require "http/client"

client = HTTP::Client.new("www.example.com")
client.head("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!") do |response|
  response.body_io.gets #=> "..."
end
Source
head(path, headers : HTTP::Headers | Nil = nil, *, form : String | IO) : HTTP::Client::Response

Executes a HEAD request with form data and returns a Response. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
response = client.head "/", form: "foo=bar"
Source
head(path, headers : HTTP::Headers | Nil = nil, *, form : String | IO, &)

Executes a HEAD request with form data and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
client.head("/", form: "foo=bar") do |response|
  response.body_io.gets
end
Source
head(path, headers : HTTP::Headers | Nil = nil, *, form : Hash(String, String) | NamedTuple) : HTTP::Client::Response

Executes a HEAD request with form data and returns a Response. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
response = client.head "/", form: {"foo" => "bar"}
Source
head(path, headers : HTTP::Headers | Nil = nil, *, form : Hash(String, String) | NamedTuple, &)

Executes a HEAD request with form data and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io. The "Content-type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
client.head("/", form: {"foo" => "bar"}) do |response|
  response.body_io.gets
end
Source
host

Returns the target host.

require "http/client"

client = HTTP::Client.new "www.example.com"
client.host # => "www.example.com"
Source
options(path, headers : HTTP::Headers | Nil = nil, body : BodyType = nil) : HTTP::Client::Response

Executes a OPTIONS request. The response will have its body as a String, accessed via HTTP::Client::Response#body.

require "http/client"

client = HTTP::Client.new("www.example.com")
response = client.options("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!")
response.body #=> "..."
Source
options(path, headers : HTTP::Headers | Nil = nil, body : BodyType = nil, &)

Executes a OPTIONS request and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io.

require "http/client"

client = HTTP::Client.new("www.example.com")
client.options("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!") do |response|
  response.body_io.gets #=> "..."
end
Source
options(path, headers : HTTP::Headers | Nil = nil, *, form : String | IO) : HTTP::Client::Response

Executes a OPTIONS request with form data and returns a Response. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
response = client.options "/", form: "foo=bar"
Source
options(path, headers : HTTP::Headers | Nil = nil, *, form : String | IO, &)

Executes a OPTIONS request with form data and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
client.options("/", form: "foo=bar") do |response|
  response.body_io.gets
end
Source
options(path, headers : HTTP::Headers | Nil = nil, *, form : Hash(String, String) | NamedTuple) : HTTP::Client::Response

Executes a OPTIONS request with form data and returns a Response. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
response = client.options "/", form: {"foo" => "bar"}
Source
options(path, headers : HTTP::Headers | Nil = nil, *, form : Hash(String, String) | NamedTuple, &)

Executes a OPTIONS request with form data and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io. The "Content-type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
client.options("/", form: {"foo" => "bar"}) do |response|
  response.body_io.gets
end
Source
patch(path, headers : HTTP::Headers | Nil = nil, body : BodyType = nil) : HTTP::Client::Response

Executes a PATCH request. The response will have its body as a String, accessed via HTTP::Client::Response#body.

require "http/client"

client = HTTP::Client.new("www.example.com")
response = client.patch("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!")
response.body #=> "..."
Source
patch(path, headers : HTTP::Headers | Nil = nil, body : BodyType = nil, &)

Executes a PATCH request and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io.

require "http/client"

client = HTTP::Client.new("www.example.com")
client.patch("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!") do |response|
  response.body_io.gets #=> "..."
end
Source
patch(path, headers : HTTP::Headers | Nil = nil, *, form : String | IO) : HTTP::Client::Response

Executes a PATCH request with form data and returns a Response. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
response = client.patch "/", form: "foo=bar"
Source
patch(path, headers : HTTP::Headers | Nil = nil, *, form : String | IO, &)

Executes a PATCH request with form data and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
client.patch("/", form: "foo=bar") do |response|
  response.body_io.gets
end
Source
patch(path, headers : HTTP::Headers | Nil = nil, *, form : Hash(String, String) | NamedTuple) : HTTP::Client::Response

Executes a PATCH request with form data and returns a Response. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
response = client.patch "/", form: {"foo" => "bar"}
Source
patch(path, headers : HTTP::Headers | Nil = nil, *, form : Hash(String, String) | NamedTuple, &)

Executes a PATCH request with form data and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io. The "Content-type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
client.patch("/", form: {"foo" => "bar"}) do |response|
  response.body_io.gets
end
Source
port

Returns the target port.

require "http/client"

client = HTTP::Client.new "www.example.com"
client.port # => 80
Source
post(path, headers : HTTP::Headers | Nil = nil, body : BodyType = nil) : HTTP::Client::Response

Executes a POST request. The response will have its body as a String, accessed via HTTP::Client::Response#body.

require "http/client"

client = HTTP::Client.new("www.example.com")
response = client.post("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!")
response.body #=> "..."
Source
post(path, headers : HTTP::Headers | Nil = nil, body : BodyType = nil, &)

Executes a POST request and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io.

require "http/client"

client = HTTP::Client.new("www.example.com")
client.post("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!") do |response|
  response.body_io.gets #=> "..."
end
Source
post(path, headers : HTTP::Headers | Nil = nil, *, form : String | IO) : HTTP::Client::Response

Executes a POST request with form data and returns a Response. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
response = client.post "/", form: "foo=bar"
Source
post(path, headers : HTTP::Headers | Nil = nil, *, form : String | IO, &)

Executes a POST request with form data and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
client.post("/", form: "foo=bar") do |response|
  response.body_io.gets
end
Source
post(path, headers : HTTP::Headers | Nil = nil, *, form : Hash(String, String) | NamedTuple) : HTTP::Client::Response

Executes a POST request with form data and returns a Response. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
response = client.post "/", form: {"foo" => "bar"}
Source
post(path, headers : HTTP::Headers | Nil = nil, *, form : Hash(String, String) | NamedTuple, &)

Executes a POST request with form data and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io. The "Content-type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
client.post("/", form: {"foo" => "bar"}) do |response|
  response.body_io.gets
end
Source
put(path, headers : HTTP::Headers | Nil = nil, body : BodyType = nil) : HTTP::Client::Response

Executes a PUT request. The response will have its body as a String, accessed via HTTP::Client::Response#body.

require "http/client"

client = HTTP::Client.new("www.example.com")
response = client.put("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!")
response.body #=> "..."
Source
put(path, headers : HTTP::Headers | Nil = nil, body : BodyType = nil, &)

Executes a PUT request and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io.

require "http/client"

client = HTTP::Client.new("www.example.com")
client.put("/", headers: HTTP::Headers{"User-Agent" => "AwesomeApp"}, body: "Hello!") do |response|
  response.body_io.gets #=> "..."
end
Source
put(path, headers : HTTP::Headers | Nil = nil, *, form : String | IO) : HTTP::Client::Response

Executes a PUT request with form data and returns a Response. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
response = client.put "/", form: "foo=bar"
Source
put(path, headers : HTTP::Headers | Nil = nil, *, form : String | IO, &)

Executes a PUT request with form data and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
client.put("/", form: "foo=bar") do |response|
  response.body_io.gets
end
Source
put(path, headers : HTTP::Headers | Nil = nil, *, form : Hash(String, String) | NamedTuple) : HTTP::Client::Response

Executes a PUT request with form data and returns a Response. The "Content-Type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
response = client.put "/", form: {"foo" => "bar"}
Source
put(path, headers : HTTP::Headers | Nil = nil, *, form : Hash(String, String) | NamedTuple, &)

Executes a PUT request with form data and yields the response to the block. The response will have its body as an IO accessed via HTTP::Client::Response#body_io. The "Content-type" header is set to "application/x-www-form-urlencoded".

require "http/client"

client = HTTP::Client.new "www.example.com"
client.put("/", form: {"foo" => "bar"}) do |response|
  response.body_io.gets
end
Source
read_timeout=(read_timeout : Number)

Sets the number of seconds to wait when reading before raising an IO::TimeoutError.

require "http/client"

client = HTTP::Client.new("example.org")
client.read_timeout = 1.5
begin
  response = client.get("/")
rescue IO::TimeoutError
  puts "Timeout!"
end
Source
read_timeout=(read_timeout : Time::Span | Nil)

Sets the read timeout with a Time::Span, to wait when reading before raising an IO::TimeoutError.

require "http/client"

client = HTTP::Client.new("example.org")
client.read_timeout = 5.minutes
begin
  response = client.get("/")
rescue IO::TimeoutError
  puts "Timeout!"
end
Source
tls
tls?
write_timeout=(write_timeout : Number)

Sets the write timeout - if any chunk of request is not written within the number of seconds provided, IO::TimeoutError exception is raised.

Source
write_timeout=(write_timeout : Time::Span | Nil)

Sets the write timeout - if any chunk of request is not written within the provided Time::Span, IO::TimeoutError exception is raised.

Source

Macros

def_around_exec

This macro allows injecting code to be run before and after the execution of the request. It should return the yielded value. It must be called with 1 block argument that will be used to pass the HTTP::Request.

class HTTP::Client
  def_around_exec do |request|
    # do something before exec
    res = yield
    # do something after exec
    res
  end
end
Source

Nested types