- fix multipart: handle case where Length is undefined
- handle
*
in path encoding - Support LF separators: since rfc7230-3.5 allows for LF-only
- fix recv stream fix fetching trailers during streaming
- fix CI
- Improve documentation
- feature: add
no_proxy_env
option to bypass proxy environment settings
- fix: recv: if expected size < BufSize fallback to old behaviour. Fix issue with negative length
- feature: add support for proxy environment setting
- security: update default CA bundles
- security: update default CA bundles
- doc: fix typos
- security: update default CA bundle
- fix pool: make checkout synchrounous (remove unwanted messages)
- fix checking when socket is put back in the pool when the requester died.
- fix: ensure we release a socket in the pool when the requester died before being monitored.
- use parse_trans 3.3.1 only (fix compatibility with Erlang < 21)
- bump certifi version
- Allow merging of SSL opts
- fix: Avoid
parse_trans
warning when using hackney as a dependency - fix: Link checkout process to fix dangling aborted request
- fix SSL compatibility with erlang OTP 23
- handle empty trailers
- fix race condition in connection pool
- fix memory leak in connection pool
- IDNA update to unicode 13.0.0
- fix build on macosx with OTP >= 20.1
- fix network Location on redirect
- produce uppercase hexadecimal in URLS
- pool queue count metric is now named
queue_count
- miscellaneous fixes in documentation
** possible breaking change **
-
pool queue count metric is now named
queue_count
. You should update your dashboard to reflect it. -
possible breacking changes when producing uppercase hexadecimal in urls
This change the behaviour of urlencode and pathencode to produce uppercase hexadecimal to comply to the RFC3986 which may affect systems using URL as signature or in an hash.
- pool: cache connection IDs
- pool: make sure to reuse a connection if the options match the one given in the request. fix usage with proxy and ssl connections
- url: handle fragment correctly, a fragment is parsed first to not be mistaken with an URL
- ssl: fix validation with Erlang 19 & Erlang 20
- ssl: handle tlsv1.3 on Erlang OTP 23
- ssl: increase validation depth to match openssl default
- ssl: optimiaz partial chain handling
- ssl: fix hostname checking and correctly handle SNI
- ssl: fix ciphers
- request: fix regression with fully fqdn
- ssl: fix usage with OTP 23
- url: decode username/password for basic auth parameters
- request: do not normalize when converting relative redirect to absolute
- ssl: update to certifi 2.5.2
- request: handle Connection: close response header for stteam
- http: handle leading new lines in HTTP messages
- http: handle trailers in persistent connection
- pool: update pool timeout docummentation
- url: fix urlencode
- doc: fix test run example in readme
- fix: hackney stream, send
hackney_response
before callinghandle_error
- fix: error remove ssl
honor_cipher_order
option - doc: document self-signed certificate usage
- bump
ssl_verify_fun
to 1.1.5 - fix: don't use default pool if set to false
- fix:
hackney_headers_new:store/3
fix value appending to a list - fix: miscellaneous specs
- doc: miscellaneous improvements
- fix: don't try to encode to IDN with full ASCII names.
this behaviour is similar to curl and fix errors some people had with docker creating domain names containing a
_
- doc: clarify
recv_timeout
usage - fix: don't try to encode hostname IPs to IDN
- fix: path encoding to support
(
)
characters - bump mimerl to 1.2
- bump certifi to 2.5.1
- improve multipart: send form with a field names for files
- fix pool
checkout_cancel
: reduce the number of pending requests
- idna: don't try to encode a unix socket path
- fix: don't IDNA encode the host with unix scheme
- doc: document
basic_auth
setting
- bump to certifi 2.4.2
- bump to idna 0.6.0
- fix support of rebar2
- fix specs
- add
hackney:sockname/1
andhackney:peername/1
functions - add new
checkout_timeout
option for clarity - improve
hackney_url:parse_qs/1
to trim leading and trailing empty values
- fix compatibility with Erlang/OTP 21
- fix parsing query parameters on url without path (#512)
- bump idna to 1.5.2: fix compatibility with rebar2 (#509)
- fix accessing HTTPS sites with an IP address (#494)
- fix terminate_async_response (#498)
- fix socks5 badarg error when an IP is given
- upgrade IDNA to 5.1.1
- upgrade certifi to 2.3.1
- fix handling of requests with content-length or transfer-encoding given (#475)
- improvements: send SNI in socks5 SSL
- fix: Allow trailing spaces at the end of chunk sizes (#489)
- fix: set once the metrics engine
- fix leak in the socket pool (#462)
- fix doc
- add: send SNI for Erlang >= 17
- fix: better handling of stream exits in
hackney_manager
- improvement: remove high priority flag from the pool process
- fix: change when hackney loads the hackney metric module (speed improvement)
- fix: return value from the function
del_from_queue
in connection pool - fix: handle empty or invalid content-length
- fix: documentation on removed method
- improvement: ignore port empty values on redirect (#444)
- fix: fix reference leak introduced in latest version (#445)
- fix: stream termination, don't raise an error on normal exit
- fix owner tracking (#443)
- fix: fix deadlock in
hackney_pool
during request timeout (#420) - fix: set PoolHandler on connect (#427)
- fix: fix unicode in include file (#426)
- security: certifi 2.0.0
- dependency: update idna 5.1.0 (fix windows build and usage with elixir)
- doc: fix typo
hackney_multipart
doc (#422)
- fix: cleanup socket in async request (#411)
- fix: dialyzer
- fix: tests
- dependency: update idna 5.0.2 (fix compatibility with erlang R20)
- security: certifi 1.2.1
- dependency: update idna 5.0.1
- fix: race condition in controlling process (#407)
- fix: spec of #hackney_url{} (#404)
- fix: make sure to not lost a message during hiberntion in async request
- security: certifi 1.2.0
- dependency: update idna 5.0.0
- fix: undefined function (#393)
- fix: close connection if proxy handshake failed (#392)
- fix: handle all headers with the new datastructure introduced in 1.7.0 (#395)
- fix: host header when redirect (#400)
- fix: use connect timeout when retrieving from the pool (#402)
- security: new certifi version
- fix: regression in headers handling (handle different key types)
- fix: new datastructure to handle headers (#390)
- security: new certifi version
- fix: fix header appending
- fix: Url encode host header for unix domain sockets (#382)
- security: new certifi version
- doc: fix few typos
- add: optional urlencode options to qs (#368)
- fix: handle continuation lines in HTTP headers correctly (#366)
- doc: Fix a few documentation typos
- fix: handle trailing whitespace in header values
- add: unix sockets support on Erlang > 19
- fix:
hackney_multiprart
for Erlang < 17 - add: new
socks5_resolver
function - fix:
hackney_util:merge_opts/2
- improvements: inet6 support in socks5 sockets
- doc: miscenaleous docs fixes
- security: being more strict in ssl support
- security: bump to certifi 0.7
- fix: close socket on error (#308)
- improvement: handle errors in
hackney_response:wait_status
(#313) - improvement: make pathencode faster (#317)
- fix: typo (#321)
- fix: elixir 1.4 warnings (#325)
- add
path_encode_fun
option to request. - add: allow force non-POST 303 redirects
- use
ssl_verif_fun
dependency to replacessl_verify_hostname
- fix: move included_applications to applications
- fix: mix packaging
- fix support of rebar 3 stable
- add mix package
- refactor: one flat source
- replace hackney_metrics_* by metrics library
- fix: hackney_pool (#286)
- security: bump to erlang-certifi 0.4.0
- bump to idna 1.1.0
- fix: don't encode @ in urls
- fix: header stream multipart
- bump to mimerl 1.0.2
- fix build with mix
- fix multipart/form parsing (#258)
- TRAVIS-CI build with rebar3
- fix rebar3 detection
- fix header value parsing (#256)
- fix build with rebar2 and Erlang < 17
- fix build with mix (#255)
- build using hex.pm & small refactoring
- fix multipart (#245)
- fix redirection (#237)
- fix url parsing (#236)
- close connection when max body length is reached (#248)
- fix
connect_time metric
(#227) - fix redirection when
with_body
is enabled (#228) - close half-closed socket to avoid leak (#231)
- fix undexpected message in
hackney_stream
(#223) - fix receive/error in hackney_manager (#232)
- fix: set default
recv_timeout
to 5s. (#219) - fix: socks5 fix auth: handle not required case (#218)
- new add
max_body
setting - fix: handle partial chains during handshake in HTTPS (#196)
- new: add
with_body
option to return the body directly (#184) - fix: rely on ssl version to validate certificates securely using hostname verification
- fix: fix redirection when transport change (#177)
- new: build is now using rebar3
- new: updated root certificates
- fix: ignore comma in set-cookie attributes (#193)
- fix: status line parsing when reason phrase is missing entirely (#190)
- fix: make sure sure the response is done during async streaming (#186)
- fix metrics (#186)
- new: bump latest version of
ssl_verify_hostname
(#175) - fix: parse server headers
- fix: really honor max redirection (#170)
- fix: handle path parameters in URL (#176)
- fix: fix max redirection (#170)
- fix: don't encode path parameters and unreserved chars. (#176)
- fix: honor max_redirect.
- fix: socket checkout in the pool: close the socket if something happen while passing the control to the client
- fix: put back the waiter in the queue of the pool if no socket can be delivered
- fix: make sure we don't release a closed typo
- add: shutdown method to transports
- add: hackney_trace module to trace a request
- add: reuse/new connection metrics
- fix: guard binary in
hackney_multipart:len_mp_stream/2
- improvement: pass the socket to
hackney:request_info/1
- dependency: update ssl_verify_hostname
- fix: make sure to pass the Host header to the request
- fix: HTTP basic authentication
- fix content-type case
- improvement: tests
- improvement: handle {error, closed} for HTTP 1.1 when no content-length is given.
- improvement: handle 204 and 304 status
- fix keep-alive handling
- remove expm package
- build under R18
- improvement: Do not wait to cancel a request
- improvement: do not control the request preemptively
- fix client leaks on error
- fix monitor counters
- fix SSL validation under R15 and R14 Erlang versions.
- Apply SSL certificate validation to SOCKS5 and HTTP proxies.
- fix redirection: rewrite Host header
- update default certification authority file. Make sure we can validate all SSL connections even on the AWS platform.
- fix typo
hackney 1.0.0 has been released. This is the first stable and long term supported release of hackney.
- add metrics
- add SSL certificate verification by default.
- fix: Pool handling
- fix: handle strings in headers
- fix; convert User/Password as string if needed
- fix: handle body given as an empty list
- export
find_pool/1
and allows any poolname.
- improve hackney performance and concurrency
- fix pool handling: make sure to reuse the connections
- fix
hackney:stop_async/1
- fix memory leak (#77): some requests were not cleaned correctly in hackney_manager.
- fix ssl race condition (#130)
- fix: check if relative url contains a forward slash
- refactor integration tests and add more tests
- fix socket pool: make sure to close all sockets when the pool is terminated, and do not store closed sockets if we know it.
- fix redirect location: make sure we use absolute urls
- fix redirection: make sure to follow redirections
- fix hackney_response:read_body/3 spec
- trim response headers when needed
- add redirection basic tests
- fix: validate if the redirection url is absolute.
- fix: return location from headers when possible in
hackney:location/1
. - fix HEAD request. Remove the need to call the body method
- fix: remove undefined function references
- tests: start to handle tests with httpbin
When doing an HEAD request, the signature of the response when it
succeeded is now {ok, Status, ResponseHeaders}
and do not contains a
client reference any more.
- put hackney_lib back in the source code and refactor the source repository
- fix: handle bad socks5 proxy response #113
- fix: handle timeout in hackney_socks4:connect/5 #112
- fix: Accept inet6 tcp option for ssl
- fix redirection
- fix: add versions option for ssl
- fix: return the full body on closed connections.
- fix: make sure to always pass the Host header.
- improvement: URI encoding is now fully normalized.
- improvement: TCP_NODELAY is now available by default for all transports
- improvements: IDNA parsing is only done during the normalization which makes all the connections faster..
- fix: connections options are now correctly passed to the transports.
- fix: HTTP proxying. make sure we reuse the connection
- fix: HTTP proxying, only resolve the proxy domain.
- bump hackney_lib to 0.3.0
the mimetypes has been
replaced by the
hackney_mimetypes
module. It makes content-type detection a little more efficient. In the
process the functions hackney_util:content_type/1
and
hackney_bstr:content_type/1
has been removed. You should now use the
function hackney_mimetypes:filename/1
.
- new improved and more performant IDNA support
- make sure the socket is closed when we skip the body if needed
- fix multipart EOF parsing
- make sure we finish a multipart stream
- bump hackney_lib to 0.2.5
- enable TCP_NODELAY by default. (To disable, pass the option
{nodelay, false} to
connect_options`.
- improvement: speed IDNA domains handing
- fix http proxy via CONNECT
- fix: encode the path
- bump to hackney_lib 0.2.4
- add
hackney:location/1
to get the final location - make
hackney_request:send/2
more efficient - fix socket removing in the pool
- fix HTTP proxying
- support IDNA hostnames
- fix multipart file header
- improve the performance when sending a
{multipart, Parts}
body. Send it as a stream. - bump hackney_lib version to 0.2.2
- improve multipart handling: With this change, we can now calculate the
full multipart stream content-length using
hackney_multipart:len_mp_stream/2
. - add
hackney:setopts/2
to set options to a request when reusing it. - add
hackney:send_reques/3
to pass new options to a request. - add the
{stream_to, Pid}
setting to a request to send the messages from an asynchronous response to another PID. - fix
Host
header: some server do not comply well with the spec and fail to parse the port when they are listening on 80 or 443. This change fix it. - fix: make sure we are re-using connections with asynchronous responses.
- All messages from an async response are now under the
format
{hackney_response, Ref, ... }
to distinct hackney messages from others in a process easily. - You can only make an async response at a time. Ie if you are are doing a persistent request (reusing the same reference) you will need to pass the async option again to the request. For that purpose the functions hackney:send_request/3 and hackney:setopts/2 have been added.
- multipart messages have changed. See the documentation for more information.
- fix response multipart processing
- add support for multipart responses
- add support for cookies: There is now a
cookie
option that can be passed to the request. It can be a sinle cookie or a list of cookies. To parse cookies from the response a functionhackney:cookies/1
has been added. It return all the cookies as a list of [{Key, Value}]. - breaking change: use hackney_lib a web toolkit to handle the HTTP protocol and other manipulations.
- optimization: send body and headers together when it is possible
- fix release handling
- add: support redirection in async responses
- improve hackney_url:make_url/3
- fix: handle case where the response is already done in async responses
- fix: trap exits in hackney_manager
service release with a new feature and some minor improvements
- added the support for socks5 proxies
- improvement: integer and atom can now be passed in url params or forms values.
- breaking change: differentiate connect/recv timeout, now connect
timeout return
{error, connect_timeout}
major release. With this release the API will not evolve much until the 1.0 release sometimes in january.
- breaking change: hackney now return a reference instead of an opaque record. The information is maintained in an ETS table. The same reference is now used for async response requests.
- breaking change:
stream_body_request/2
andstream_multipart_request/2
functions has been renamed tosend_body/2
andsend_multipart_body/2
. - breaking change: remove
hackney:close_stream/1
function. You only need to usehackney:close/1
now. - breaking change: rename
hackney:raw/1
function tohackney:cancel_request/1
. - breaking change: the hakney pool handler based on dispcount is now available in its own repository so hackney doe not depends on dispcount.
- fix: canceling and closing a request now make sure the async response process is killed.
- fix: make sure we pass a
Transfer-Encoding: chunked
header when we send a body without content-length. - fix: make sure the client is correctly reconnected when we reuse a reference.
- add new Loadbalance pool handler based on dispcount
- allows to set the pool handler
- breaking change: remove
hackney:start_pool/2
andhackney:stop_pool/1
, use insteadhackney_pool:start_pool/2
andhackney_pool:stop_pool/1
- breaking change: A pool is now used by default
- breaking change: The
hackney_form
module has been removed. You can now encode/parse a form using the functions in thehackney_url
module. - deprecate
pool_size
and replace it bymax_connections
- fix: apply applications defaults to the pool
- doc: Fix the asynchronous response example in the readme
- add hackney_url:make_url/3, hackney_url:qs/1, hackney_url:parse_qs/1 functions
- add the possibility to get an asynchronous response
- add support for the "Expect: 100-continue" header
- add hackney:controlling_process/2 to pass the control of an hackney context to another process
- fix: proxied connections
- fix: correct the path passed to a request
- fix: multipart forms
- fix: Make sure that the controller process of the socket is the pool process when the socket is in the pool
- fix: auth header when when the user is not given
- fix: doc typos
- fix: dialyzer errors
- fix: add mimetypes to the list of loaded applications
- fix: test.ebin example
- removed parse_transform, the REST API is now available at the compilation. fix: fix file upload content type
- doc: fix typos
- handle
identity
transfer encoding. When the connection close return latest buffer.
- Body can be passed as a function
- Add recv_timeout option
- Fix HEAD request (don't stream the body)
- Don't pass the Port to the Host header if it's default (http, https)
- Set the connection timeout
- Make sure sendfile correctly handle chunked encoding
- Add support for partial file uploads
- Return received buffer when no content length is given (http 1.0)
- Instead of returning
{error, closed}
, return{error, {closed, Buffer}}
when you receive the body, so you can figure what happened and maybe use the partial body.
- Allows to stream a multipart request
- Add
insecure
option to connect via ssl without verifying an SSL certificate - Handle empty headers values
- Add
force_redirect
option - Add expm support
- Fix body streaming
- Fix SSL handling
- Fix hackney:request/3 (no more loop)
- Add Multipart support
- Add HTTP Proxy tunneling support
- Fix Chunked Response decoding
- Allows the user to use a custom function to stream the body
- Add the possibility to send chunked requests
- Add an option to automatically follow a redirection
- Allows the user to force hackney to use the default pool
- initial release