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 thepathcomponent (#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_browserargument that lets you take
control of whether a browser is opened or the URL is printed (@plietar, #763) -
req_perform_parallel()handlesprogressargument 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_VERBOSITYenvironment 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 customauthfunctions no longer produces errors (#648).req_dry_run()omits headers that would vary in tests and can prettify JSON output.req_headers()automatically redactsAuthorizationheaders (#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_urivalues (@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_activeargument (#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_parseerror
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 = 2when nethiermax_triesnor
max_secondsis set. If you want to disable retries, setmax_tries = 1. -
req_perform_connection()gains averbosityargument, which is useful for
understanding exactly how data is streamed back to you (#599).
req_perform_promise()also gains averbosityargument. -
req_url_query()can control how spaces are encoded with.space(#432). -
resp_link_url()handles multipleLinkheaders (#587). -
resp_stream_sse()will warn if it recieves a partial event. -
url_parse()parses relative URLs with newbase_urlargument (#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 butGETrequests 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::promiseso a request can
run in the background (#501, @gergness). -
req_perform_parallel()now respects error handling inreq_error().