Releases: r-lib/httr2
httr2 1.2.1
httr2 1.2.0
Lifecycle changes
-
req_perform_stream()
has been soft deprecated in favour of
req_perform_connection()
. -
Deprecated functions
mutli_req_perform()
,req_stream()
,with_mock()
and
local_mock()
have been removed. -
Deprecated arguments
req_perform_parallel(pool)
,
req_oauth_auth_code(host_name, host_ip, port)
, and
oauth_flow_auth_code(host_name, host_ip, port)
have been removed.
New features
-
Redacted headers are no longer serialized to disk. This is important since it
makes it harder to accidentally leak secrets to files on disk, but comes at a
cost: you can longer perform such requests that have been saved and reloaded
(#721). -
URL construction is now powered by
curl::curl_modify_url()
, and hence now
(correctly) escapes thepath
component (#732). This means that
req_url_path()
now can only affect the path component of the URL, not
the query params or fragment. -
New
last_request_json()
andlast_response_json()
to conveniently see
JSON bodies (#734). -
New
req_get_url()
,req_get_method()
,req_get_headers()
,
req_body_get_type()
, andreq_get_body()
allow you to introspect a request
object (#718). -
New
resp_timing()
exposes timing information about the request measured
by libcurl (@arcresu, #725).
Minor improvements bug fixues
-
Functions that capture interrutps (like
req_perform_parallel()
and friends)
are now easier to escape if they're called inside a loop: you can press
Ctrl + C twice to guarantee an exit (#1810). -
req_perform_iterative()
,req_perform_sequential()
,
req_perform_parallel()
,req_perform_promise()
, and
req_perform_connection()
now support mocking (#651). To mock the response
fromreq_perform_connection()
create a response with the newStreamingBody
for a body. -
new_response()
is now exported (#751). -
req_body_json()
andreq_body_form()
correctly unobfuscated inputs,
as documented (#754). -
req_body_json_modify()
can now be used on a request with an empty body. -
req_error()
errors with long bodies are now correctly wrapped (#727). -
req_oauth_device()
gains anopen_browser
argument that lets you take
control of whether a browser is opened or the URL is printed (@plietar, #763) -
req_perform_parallel()
handlesprogress
argument consistently with other
functions (#726). -
req_url_query()
now re-calculates n lengths when using.multi = "explode"
to avoid select/recycling issues (@Kevanness, #719). -
All print methods now send output to stdout, not the message stream.
httr2 1.1.2
httr2 1.1.1
New features
req_perform_parallel()
lifts many of the previous restrictions. It supports simplified versions ofreq_throttle()
andreq_retry()
, can refresh OAuth tokens, and checks the cache before/after each request. (#681).- Default verbosity can be controlled by the
HTTR2_VERBOSITY
environment variable (#687). local_verbosity()
matches the existingwith_verbosity()
and allows for local control of verbosity (#687).req_dry_run()
andreq_verbose()
display compressed correctly (#91, #656) and automatically prettify JSON bodies (#668). You can suppress prettification withoptions(httr2_pretty_json = FALSE)
(#668).req_throttle()
implements a new "token bucket" algorithm that maintains average rate limits while allowing bursts of higher request rates.
Minor improvements and bug fixes
aws_v4_signature()
correctly processes URLs containing query parameters (@jeffreyzuber, #645).oauth_client()
andoauth_token()
implement improved print methods with bulleted lists, similar to other httr2 objects, andoauth_client()
with customauth
functions no longer produces errors (#648).req_dry_run()
omits headers that would vary in tests and can prettify JSON output.req_headers()
automatically redactsAuthorization
headers (#649) and correctly implements case-insensitive modification of existing headers (#682).req_headers_redacted()
now supports dynamic dots (#647).req_oauth_auth_code()
no longer adds trailing "/" characters to properly formedredirect_uri
values (@jonthegeek, #646).req_perform_connection()
produces more helpful error messages when requests fail at the networking level.req_perform_parallel(pool)
now is deprecated in favour of a newmax_active
argument (#681).req_user_agent()
memoizes the default user agent to improve performance, as computing version numbers is relatively slow (300 µs).resp_link_url()
once again respects the case insensitivity for header names (@DavidRLovell, #655).resp_stream_sse()
automatically retrieves the next event when the current event contains no data, and returns data as a single string (#650).str()
correctly redacts redacted headers (#682).
httr2 1.1.0
Lifecycle changes
-
req_perform_stream()
is superseded in favor ofreq_perform_connection()
,
which is no longer experimental (#625). -
with_mock()
andlocal_mock()
are defunct and will be removed in the next
release.
New features
-
is_online()
wrapscurl::has_internet()
, making it easy to tell if you're
currently online (#512). -
req_headers_redacted()
makes it easier to redact sensitive headers (#561). -
req_retry()
implements "circuit breaking", which immediatelys error after
multiple failures to the same server (e.g. because the server is down)
(#370). -
req_url_relative()
navigates to a relative URL (#449). -
resp_request()
returns the request associated with a response; this can
be useful when debugging (#604). -
resp_stream_is_complete()
checks if data remains in the stream (#559). -
url_modify()
,url_modify_query()
, andurl_modify_relative()
modify
URLs (#464);url_query_parse()
andurl_query_build()
parse and build
query strings (#425).
Bug fixes and minor improvements
-
OAuth response parsing errors now have a dedicated
httr2_oauth_parse
error
class that includes the original response object (@atheriel, #596). -
curl_translate()
converts cookie headers toreq_cookies_set()
(#431)
and JSON data toreq_body_json_modify()
calls (#258). -
print.request()
escapes{}
in headers (#586). -
req_auth_aws_v4()
formats the AWS Authorization header correctly (#627). -
req_retry()
defaults tomax_tries = 2
when nethiermax_tries
nor
max_seconds
is set. If you want to disable retries, setmax_tries = 1
. -
req_perform_connection()
gains averbosity
argument, which is useful for
understanding exactly how data is streamed back to you (#599).
req_perform_promise()
also gains averbosity
argument. -
req_url_query()
can control how spaces are encoded with.space
(#432). -
resp_link_url()
handles multipleLink
headers (#587). -
resp_stream_sse()
will warn if it recieves a partial event. -
url_parse()
parses relative URLs with newbase_url
argument (#449) and
the uses faster and more correctcurl::curl_parse_url()
(#577).
httr2 1.0.7
httr2 1.0.6
- Fix stochastic test failure, particularly on CRAN (#572)
- New
oauth_cache_clear()
is an exported end point to clear the OAuth cache. - New
req_auth_aws_v4()
signs request using AWS's special format (#562, #566). req_cache()
no longer retrieves anything butGET
requests from the cache.- New
resp_stream_aws()
to retrieve AWS's special streaming format. With thanks to https://github.com/lifion/lifion-aws-event-stream/ for a simple reference implementation.
httr2 1.0.5
req_perform_parallel()
andreq_perform_promise()
now correctly set up the method and body (#549).
httr2 1.0.4
req_body_file()
now works with files >64kb once more (#524) and no longer leaks a connection if the response doesn't complete succesfully (#534).req_body_*()
now give informative error if you attempt to change the body type (#451).req_cache()
now re-caches the response if the body is hasn't been modified but the headers have changed (#442). It also works better whenreq_perform()
sets a path (#442).- New
req_cookie_set()
allows you to set client side cookies (#369). req_perform()
no longer displays a progress bar when sleeping during tests. You can override this behaviour by setting the optionhttr2_progress
.req_perform_iterative()
is no longer experimental.- New
req_perform_connection()
for working with streaming data. Unlikereq_perform_stream()
which uses callbacks,req_perform_connection()
returns a regular response object with a connection as the body. Unlikereq_perform_stream()
it supportsreq_retry()
(with @jcheng5, #519). req_retry()
no longer treates low-level HTTP failures the same way as transient errors by default. You can return to the previous behaviour withretry_on_error = TRUE
.resp_body_html()
andresp_body_xml()
now work whenreq_perform()
is given a path (#448).- New
resp_stream_bytes()
,resp_stream_lines()
, andresp_stream_sse()
for streaming chunk from a connection response (#519).
httr2 1.0.3
-
jwt_encode_hmac()
now calls correct underlying function
jose::jwt_encode_hmac()
and has correct default size parameter value
(@denskh, #508). -
req_cache()
now prunes cache before checking if a given key exists,
eliminating the occassional error about reading from an invalid RDS file.
It also no longer tests for existence then later reads the cache, avoiding
potential race conditions. -
New
req_perform_promise()
creates apromises::promise
so a request can
run in the background (#501, @gergness). -
req_perform_parallel()
now respects error handling inreq_error()
.