- Notifications
You must be signed in to change notification settings - Fork19
HTTP2 client for Erlang based on libcurl and libevent
License
NotificationsYou must be signed in to change notification settings
puzza007/katipo
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
An HTTP/HTTP2 client library for Erlang built around libcurl-multi and libevent.
{ok,_}=application:ensure_all_started(katipo).Pool=api_server,{ok,_}=katipo_pool:start(Pool,2, [{pipelining,multiplex}]).Url= <<"https://example.com">>.ReqHeaders= [{<<"User-Agent">>, <<"katipo">>}].Opts= #{headers=>ReqHeaders,body=> <<"0d5cb3c25b0c5678d5297efa448e1938">>,connecttimeout_ms=>5000,proxy=> <<"http://127.0.0.1:9000">>,ssl_verifyhost=>false,ssl_verifypeer=>false},{ok, #{status :=200,headers :=RespHeaders,cookiejar :=CookieJar,body :=RespBody}}=katipo:post(Pool,Url,Opts).
Or passing the entire request as a map
{ok,_}=application:ensure_all_started(katipo).Pool=api_server,{ok,_}=katipo_pool:start(Pool,2, [{pipelining,multiplex}]).ReqHeaders= [{<<"User-Agent">>, <<"katipo">>}].Req= #{url=> <<"https://example.com">>.method=>post,headers=>ReqHeaders,body=> <<"0d5cb3c25b0c5678d5297efa448e1938">>,connecttimeout_ms=>5000,proxy=> <<"http://127.0.0.1:9000">>,ssl_verifyhost=>false,ssl_verifypeer=>false},{ok, #{status :=200,headers :=RespHeaders,cookiejar :=CookieJar,body :=RespBody}}=katipo:req(Pool,Req).
We wanted a compatible and high-performance HTTP client so tookadvantage of the 15+ years of development that has gone into libcurl.To allow large numbers of simultaneous connections libevent is usedalong with the libcurl-multi interface.
-typemethod()::get |post |put |head |options.katipo_pool:start(Name::atom(),size::pos_integer(),PoolOptions::proplist()).katipo_pool:stop(Name::atom()).katipo:req(Pool::atom(),Req::map()).katipo:Method(Pool::atom(),URL::binary()).katipo:Method(Pool::atom(),URL::binary(),ReqOptions::map()).
Option | Values | Default | Notes |
---|---|---|---|
mod_metrics | folsom | exometer | noop | noop | seeerlang-metrics |
Option | Type | Default | Notes |
---|---|---|---|
headers | [{binary(), iodata()}] | [] | |
cookiejar | opaque (returned in response) | [] | |
body | iodata() | <<>> | |
connecttimeout_ms | pos_integer() | 30000 | docs |
followlocation | boolean() | false | docs |
ssl_verifyhost | boolean() | true | docs |
ssl_verifypeer | boolean() | true | docs |
capath | binary() | undefined | |
cacert | binary() | undefined | |
timeout_ms | pos_integer() | 30000 | |
maxredirs | non_neg_integer() | 9 | |
proxy | binary() | undefined | docs |
return_metrics | boolean() | false | |
tcp_fastopen | boolean() | false | docs curl >= 7.49.0 |
interface | binary() | undefined | docs |
unix_socket_path | binary() | undefined | docs curl >= 7.40.0 |
lock_data_ssl_session | boolean() | false | docs curl >= 7.23.0 |
doh_url | binary() | undefined | docs curl >= 7.62.0 |
http_version | curl_http_version_none curl_http_version_1_0 curl_http_version_1_1 curl_http_version_2_0 curl_http_version_2tls curl_http_version_2_prior_knowledge | curl_http_version_none | docs curl >= 7.62.0 |
sslcert | binary() | undefined | docs |
sslkey | binary() | undefined | docs |
sslkey_blob | binary() (DER format) | undefined | docs curl >= 7.71.0 |
keypasswd | binary() | undefined | docs |
http_auth | basic digest ntlm negotiate | undefined | docs |
userpwd | binary() | undefined | docs |
{ok, #{status :=pos_integer(),headers :=headers(),cookiejar :=cookiejar(),body :=body(),metrics=>proplist()}}{error, #{code :=atom(),message :=binary()}}
Option | Type | Default | Note |
---|---|---|---|
pipelining | nothing http1 multiplex | nothing | HTTP pipeliningCURLMOPT_PIPELINING |
max_pipeline_length | non_neg_integer() | 100 | |
max_total_connections | non_neg_integer() | 0 (no limit) | docs |
- ok
- error
- status.XXX
- total_time
- curl_time
- namelookup_time
- connect_time
- appconnect_time
- pretransfer_time
- redirect_time
- starttransfer_time
- libevent-dev
- libcurl4-openssl-dev
- make
- curl
- libssl-dev
- gcc
The official Erlang Dockerimagehas everything needed to build and test Katipo
- A more structured way to ifdef features based on curl version
About
HTTP2 client for Erlang based on libcurl and libevent
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
No packages published
Uh oh!
There was an error while loading.Please reload this page.
Contributors14
Uh oh!
There was an error while loading.Please reload this page.