httr2 1.0.0
Function lifecycle
-
local_mock()
andwith_mock()
have been deprecated in favour of
local_mocked_responses()
andwith_mocked_responses()
(#301). -
multi_req_perform()
is deprecated in favour ofreq_perform_parallel()
.
req_stream()
is deprecated in favour ofreq_perform_stream()
(#314). -
oauth_flow_auth_code()
deprecateshost_name
andport
arguments in favour
of usingredirect_uri
. It also deprecateshost_ip
since it seems unlikely
that changing this is ever useful. -
oauth_flow_auth_code_listen()
now takes a singleredirect_uri
argument
instead of separatehost_ip
andport
arguments. This is a breaking change
but I don't expect anyone to call this function directly (which was confirmed
by a GitHub search) so I made the change without deprecation. -
req_body_form()
andreq_body_multipart()
now require data...
;
they no longer accept a single list for compatibility with the 0.1.0
API.
Multiple requests
-
New
req_perform_sequential()
performs a known set of requests
sequentially. It has an interface similar toreq_perform_parallel()
but
with no limitations, and the cost of being slower (#361). -
New
req_perform_iterative()
performs multiple requests, where each request
is derived from the previous response (@mgirlich, #8). -
req_perform_parallel()
replacesmulti_req_perform()
to match the new
naming scheme (#314). It gains aprogress
argument. -
req_perform_iterative()
,req_perform_parallel()
, and
req_perform_sequential()
share a new error handling strategy. By
default, errors will be bubbled up, but you can choose an alternative
strategy with theon_error
argument (#372). -
A new family of functions
resps_successes()
,resps_failures()
,
resps_requests()
andresps_data()
make it easier to work with lists of
responses (#357). Behind the scenes, these work because the request is now
stored in the response (or error) object (#357). -
resp_body_json()
andresp_body_xml()
now cache the parsed values so
that you can use them repeatedly without worrying about the performance cost.
This supports the designreq_perform_iterative()
by avoiding the need to
carefully pass around a parsed object.
OAuth features
-
A new
vignette("oauth")
gives many more details about how OAuth works and
how to use it with httr2 (#234), and the OAuth docs have been overhauled to
make it more clear that you should usereq_oauth_*()
, notoauth_*()
(#330). -
If you are using an OAuth token with a refresh token, and that refresh
token has expired, then httr2 will now re-run the entire flow to get
you a new token (#349). -
New
oauth_cache_path()
returns the path that httr2 uses for caching OAuth
tokens. Additionally, you can now change the cache location by setting the
HTTR2_OAUTH_CACHE
env var. This is now more obvious to the user, because
httr2 now informs the user whenever a token is cached. -
oauth_flow_auth_code()
gains aredirect_uri
argument rather than deriving
this URL automatically from thehost_name
andport
(#248). It uses
this argument to automatically choose which strategy to use to get the
auth code, either launching a temporary web server or, new, allowing you to
manually enter the details with the help of a custom JS/HTML page hosted
elsewhere, or by copying and pasting the URL you're redirected to
(@fh-mthomson, #326). The temporary web server now also respects the path
component ofredirect_uri
, if the API needs a specific path (#149). -
New
oauth_token_cached()
allows you to get an OAuth token while still
taking advantage of httr2's caching and auto-renewal features. For expert
use only (#328).
Other new features
-
@mgirlich is now a httr2 contributor in recognition of his many contributions.
-
req_cache()
gainsmax_n
,max_size
, andmax_age
arguments to
automatically prune the cache. By default, the cache will stay under 1 GB
(#207). -
New
req_body_json_modify()
allows you to iteratively modify a JSON
body of a request. -
New
req_cookie_preserve()
lets you use a file to share cookies across
requests (#223). -
New
req_progress()
adds a progress bar to long downloads or uploads (#20). -
New
resp_check_content_type()
to check response content types (#190).
resp_body_json()
and friends give better errors if noContent-Type
header is present in the response (#284). -
New
resp_has_body()
returns aTRUE
orFALSE
depending on whether
or not the response has a body (#205). -
New
resp_url()
,resp_url_path()
,resp_url_queries()
and
resp_url_query()
to extract various part of the response url (#57). -
req_url_query()
gains a.multi
parameter that controls what happens when
you supply multiple values in a vector. The default will continue to error
but you can use.multi = "comma"
to separate with commas,"pipe"
to
separate with|
, and"explode"
to generate one parameter for each
value (e.g.?a=1&a=2
) (#350). -
New
secret_encrypt_file()
andsecret_decrypt_file()
for encrypting and
decrypting files (#237).
Minor improvements and bug fixes
-
The httr2 examples now only run on R 4.2 and later so that we can use
the base pipe and lambda syntax (#345). -
OAuth errors containing a url now correctly display that URL
(instead of the string "uri"). -
curl_translate()
now uses the base pipe, and produces escapes with single
quotes or raw strings in case double quotes can't be used (@mgirlich, #264).
It gains the argumentsimplify_headers
that removes some common but
unimportant headers, likeSec-Fetch-Dest
orsec-ch-ua-mobile
(@mgirlich, #256). It also parses the query components of the url
(@mgirlich, #259) and works with multiline commands from the clipboard
(@mgirlich, #254). -
local_mocked_responses()
andwith_mocked_responses()
now accept a
list of responses which will be returned in sequence. They also now correctly
trigger errors when the mocked response represents an HTTP failure (#252). -
oauth_flow_refresh()
now only warns, not errors, if therefresh_token
changes, making it a little easier to use in manual workflows (#186). -
obfuscated()
values now display their original call when printed. -
req_body_json()
gains custom contenttype
argument
and respects custom content-type set in header (@mgirlich, #189). -
req_cache()
now combine the headers of the new response with the headers
of the cached response. In particular, this fixesresp_body_json/xml/html()
on cached responses (@mgirlich, #277). -
req_perform()
now throws error with classhttr2_failure/httr2_error
if
the request fails, and that error now captures the curl error as the parent.
If the request succeeds, but the response is an HTTP error, that error
now also has super classhttr2_error
. This means that all errors thrown by
httr2 now inherit from thehttr2_error
class. See new docs in?req_error()
for more details. -
req_perform()
's progress bar can be suppressed by setting
options(httr2_progress = FALSE)
(#251). Progress bars displayed while
waiting for some time to pass now tell you why they're waiting (#206). -
req_oauth_bearer_jwt()
now includes the claim in the cache key (#192). -
req_oauth_device()
now takes aauth_url
parameter making it usable
(#331, @taerwin). -
req_url_query()
gains a.multi
parameter that controls what happens when
you supply multiple values in a vector. The default will continue to error
but you can use.multi = "comma"
to separate with commas,"pipe"
to
separate with|
, and"explode"
to generate one parameter for each
value (e.g.?a=1&a=2
) (#350).