Skip to content

HTTP/1 and HTTP/2 client for Elixir. Based on Gun and Poolboy.

License

Notifications You must be signed in to change notification settings

petrohi/machine_gun

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

52 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Hex.pm version Hex.pm downloads Build Status

MachineGun

HTTP client for Elixir. Based on Gun and Poolboy.

  • Supports HTTP/1 and HTTP/2 with automatic detection;
  • Maintains separate connection pool for each pool_group:host:port combination;
  • Allows per-pool configuration;
  • Drop-in replacement for HTTPoison.

Example

%MachineGun.Response{body: body, status_code: 200} =
  MachineGun.post!(
    "https://httpbin.org/anything",
    "{\"hello\":\"world!\"}",
    [{"content-type", "application/json"}, {"accept", "application/json"}],
    %{pool_timeout: 1000, request_timeout: 5000, pool_group: :default})

Options are included to show defaults and can be omitted. pool_timeout and request_timeout default to values specified in pool group configuration. If not specified in pool group configuration they default to the values in the example.

Configuration

config :machine_gun,
  # Default pool group
  default: %{
    pool_size: 4,         # Poolboy size
    pool_max_overflow: 4, # Poolboy max_overflow
    pool_timeout: 1000,
    request_timeout: 5000,
    conn_opts: %{}        # Gun connection options
  }

Configuration example shows defaults and can be omitted. See Poolboy options documentation for explanation of pool_size and pool_max_overflow. See Gun manual for explanation of conn_opts.

Notes

  • When using MachineGun in a long-living process (for example genserver) make sure to handle messages in the form of {ref, _} tuples, which may be produced by pool timeouts.
  • When using MachineGun with HTTP/2 and modern HTTP/1 servers we recommend using lowercase header names. For example content-type.
  • MachineGun may timeout when request with empty body contains content-type header and does not contain content-length header. See this issue for details.

About

HTTP/1 and HTTP/2 client for Elixir. Based on Gun and Poolboy.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages