\\n
\\n ..."},{"path":"https://httr2.r-lib.org/dev/index.html","id":"major-differences-to-httr","dir":"","previous_headings":"","what":"Major differences to httr","title":"Perform HTTP Requests and Process the Responses","text":"can now create modify request without performing . means ’s now single function perform request fetch result: req_perform(). req_perform() replaces httr::GET(), httr::POST(), httr::DELETE(), . HTTP errors automatically converted R errors. Use req_error() override defaults (turn 4xx 5xx responses errors) add additional details error message. can automatically retry request fails encounters transient HTTP error (e.g. 429 rate limit request). req_retry() defines maximum number retries, errors transient, long wait tries. OAuth support totally overhauled directly support many flows make much easier customise built-flows create . can manage secrets (often needed testing) secret_encrypt() friends. can obfuscate mildly confidential data obfuscate(), preventing scraped published code. can automatically cache cacheable results req_cache(). Relatively API responses cacheable, typically makes big difference.","code":""},{"path":"https://httr2.r-lib.org/dev/index.html","id":"acknowledgements","dir":"","previous_headings":"","what":"Acknowledgements","title":"Perform HTTP Requests and Process the Responses","text":"httr2 wouldn’t possible without curl, openssl, jsonlite, jose, maintained Jeroen Ooms. big thanks also go Jenny Bryan Craig Citro given much useful feedback design internals user facing API.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/curl_translate.html","id":null,"dir":"Reference","previous_headings":"","what":"Translate curl syntax to httr2 — curl_translate","title":"Translate curl syntax to httr2 — curl_translate","text":"curl command line tool commonly used demonstrate HTTP APIs can easily generated browser developer tools. curl_translate() saves pain manually translating calls implementing partial, frequently used, subset curl options. Use curl_help() see supported options, curl_translate() translate curl invocation copy pasted elsewhere. Inspired curlconverter written Bob Rudis.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/curl_translate.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Translate curl syntax to httr2 — curl_translate","text":"","code":"curl_translate(cmd, simplify_headers = TRUE) curl_help()"},{"path":"https://httr2.r-lib.org/dev/reference/curl_translate.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Translate curl syntax to httr2 — curl_translate","text":"cmd Call curl. omitted clipr package installed, retrieved clipboard. simplify_headers Remove typically unimportant headers included copying curl command browser. includes: sec-fetch-* sec-ch-ua* referer, pragma, connection","code":""},{"path":"https://httr2.r-lib.org/dev/reference/curl_translate.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Translate curl syntax to httr2 — curl_translate","text":"string containing translated httr2 code. input copied clipboard, translation copied back clipboard.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/curl_translate.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Translate curl syntax to httr2 — curl_translate","text":"","code":"curl_translate(\"curl http://example.com\") #> request(\"http://example.com\") |> #> req_perform() curl_translate(\"curl http://example.com -X DELETE\") #> request(\"http://example.com\") |> #> req_method(\"DELETE\") |> #> req_perform() curl_translate(\"curl http://example.com --header A:1 --header B:2\") #> request(\"http://example.com\") |> #> req_headers( #> A = \"1\", #> B = \"2\", #> ) |> #> req_perform() curl_translate(\"curl http://example.com --verbose\") #> request(\"http://example.com\") |> #> req_perform(verbosity = 1)"},{"path":"https://httr2.r-lib.org/dev/reference/example_url.html","id":null,"dir":"Reference","previous_headings":"","what":"Code for examples — example_url","title":"Code for examples — example_url","text":"example_url() runs simple websever using webfakes package following endpoints: ones webfakes::httpbin_app() /iris: paginate iris dataset. query parameters page limit control pagination. example_github_client() OAuth client GitHub.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/example_url.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Code for examples — example_url","text":"","code":"example_url() example_github_client()"},{"path":"https://httr2.r-lib.org/dev/reference/httr2-package.html","id":null,"dir":"Reference","previous_headings":"","what":"httr2: Perform HTTP Requests and Process the Responses — httr2-package","title":"httr2: Perform HTTP Requests and Process the Responses — httr2-package","text":"Tools creating modifying HTTP requests, performing processing results. 'httr2' modern re-imagining 'httr' uses pipe-based interface solves problems API wrapping packages face.","code":""},{"path":[]},{"path":"https://httr2.r-lib.org/dev/reference/httr2-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"httr2: Perform HTTP Requests and Process the Responses — httr2-package","text":"Maintainer: Hadley Wickham hadley@posit.co contributors: Posit Software, PBC [copyright holder, funder] Maximilian Girlich [contributor]","code":""},{"path":"https://httr2.r-lib.org/dev/reference/iterate_with_offset.html","id":null,"dir":"Reference","previous_headings":"","what":"Iteration helpers — iterate_with_offset","title":"Iteration helpers — iterate_with_offset","text":"functions intended use next_req argument req_perform_iterative(). implements iteration common pagination pattern: iterate_with_offset() increments query parameter, e.g. ?page=1, ?page=2, ?offset=1, offset=21. iterate_with_cursor() updates query parameter value cursor found somewhere response. iterate_with_link_url() follows url found Link header. See resp_link_url() details.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/iterate_with_offset.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Iteration helpers — iterate_with_offset","text":"","code":"iterate_with_offset( param_name, start = 1, offset = 1, resp_pages = NULL, resp_complete = NULL ) iterate_with_cursor(param_name, resp_param_value) iterate_with_link_url(rel = \"next\")"},{"path":"https://httr2.r-lib.org/dev/reference/iterate_with_offset.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Iteration helpers — iterate_with_offset","text":"param_name Name query parameter. start Starting value. offset Offset page. default set 1 get (e.g.) ?page=1, ?page=2, ... param_name refers element index (rather page index) want set larger number get (e.g.) ?items=20, ?items=40, ... resp_pages callback function takes response (resp) returns total number pages, NULL unknown. called . resp_complete callback function takes response (resp) returns TRUE pages. resp_param_value callback function takes response (resp) returns next cursor value. Return NULL pages. rel \"link relation type\" use retrieve next page.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/iterate_with_offset.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Iteration helpers — iterate_with_offset","text":"","code":"req <- request(example_url()) |> req_url_path(\"/iris\") |> req_throttle(10) |> req_url_query(limit = 50) # If you don't know the total number of pages in advance, you can # provide a `resp_complete()` callback is_complete <- function(resp) { length(resp_body_json(resp)$data) == 0 } resps <- req_perform_iterative( req, next_req = iterate_with_offset(\"page_index\", resp_complete = is_complete), max_reqs = Inf ) if (FALSE) { # \\dontrun{ # Alternatively, if the response returns the total number of pages (or you # can easily calculate it), you can use the `resp_pages()` callback which # will generate a better progress bar. resps <- req_perform_iterative( req |> req_url_query(limit = 1), next_req = iterate_with_offset( \"page_index\", resp_pages = function(resp) resp_body_json(resp)$pages ), max_reqs = Inf ) } # }"},{"path":"https://httr2.r-lib.org/dev/reference/jwt_claim.html","id":null,"dir":"Reference","previous_headings":"","what":"Create and encode a JWT — jwt_claim","title":"Create and encode a JWT — jwt_claim","text":"jwt_claim() wrapper around jose::jwt_claim() creates JWT claim set extra default values. jwt_encode_sig() jwt_encode_hmac() thin wrappers around jose::jwt_encode_sig() jose::jwt_encode_hmac() exist primarily make specification functions little simpler.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/jwt_claim.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create and encode a JWT — jwt_claim","text":"","code":"jwt_claim( iss = NULL, sub = NULL, aud = NULL, exp = unix_time() + 5L * 60L, nbf = unix_time(), iat = unix_time(), jti = NULL, ... ) jwt_encode_sig(claim, key, size = 256, header = list()) jwt_encode_hmac(claim, secret, size = 256, header = list())"},{"path":"https://httr2.r-lib.org/dev/reference/jwt_claim.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create and encode a JWT — jwt_claim","text":"iss Issuer claim. Identifies principal issued JWT. sub Subject claim. Identifies principal subject JWT (.e. entity claims apply ). aud Audience claim. Identifies recipients JWT intended. principle intended process JWT must identified unique value. exp Expiration claim. Identifies expiration time JWT MUST accepted processing. Defaults 5 minutes. nbf claim. Identifies time JWT MUST accepted processing. Defaults current time. iat Issued claim. Identifies time JWT issued. Defaults current time. jti JWT ID claim. Provides unique identifier JWT. omitted, uses random 32-byte sequence encoded base64url. ... additional claims include claim set. claim Claim set produced jwt_claim(). key RSA EC private key either specified path file, connection, string (PEM/SSH format), raw vector (DER format). size Size, bits, sha2 signature, .e. 256, 384 512. HMAC/RSA, applicable ECDSA keys. header named list giving additional fields include JWT header. secret String raw vector secret passphrase.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/jwt_claim.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create and encode a JWT — jwt_claim","text":"S3 list class jwt_claim.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/jwt_claim.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create and encode a JWT — jwt_claim","text":"","code":"claim <- jwt_claim() str(claim) #> List of 4 #> $ exp: num 1.73e+09 #> $ nbf: num 1.73e+09 #> $ iat: num 1.73e+09 #> $ jti: chr \"uXNKv8uykXPc3pE8Cc9gSBVmyMX4-Inha63W6bBQwSk\" #> - attr(*, \"class\")= chr [1:2] \"jwt_claim\" \"list\""},{"path":"https://httr2.r-lib.org/dev/reference/last_response.html","id":null,"dir":"Reference","previous_headings":"","what":"Retrieve most recent request/response — last_response","title":"Retrieve most recent request/response — last_response","text":"functions retrieve recent request made httr2 response received, facilitate debugging problems occur. request succeed (requests made) last_response() NULL.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/last_response.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Retrieve most recent request/response — last_response","text":"","code":"last_response() last_request()"},{"path":"https://httr2.r-lib.org/dev/reference/last_response.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Retrieve most recent request/response — last_response","text":"HTTP response/request.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/last_response.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Retrieve most recent request/response — last_response","text":"","code":"invisible(request(\"http://httr2.r-lib.org\") |> req_perform()) last_request() #> #> GET http://httr2.r-lib.org #> Body: empty last_response() #> #> GET https://httr2.r-lib.org/ #> Status: 200 OK #> Content-Type: text/html #> Body: In memory (18196 bytes)"},{"path":"https://httr2.r-lib.org/dev/reference/multi_req_perform.html","id":null,"dir":"Reference","previous_headings":"","what":"Perform a list of requests in parallel — multi_req_perform","title":"Perform a list of requests in parallel — multi_req_perform","text":"Please use req_perform_parallel() instead, note: cancel_on_error = FALSE now on_error = \"continue\" cancel_on_error = TRUE now on_error = \"return\"","code":""},{"path":"https://httr2.r-lib.org/dev/reference/multi_req_perform.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Perform a list of requests in parallel — multi_req_perform","text":"","code":"multi_req_perform(reqs, paths = NULL, pool = NULL, cancel_on_error = FALSE)"},{"path":"https://httr2.r-lib.org/dev/reference/multi_req_perform.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Perform a list of requests in parallel — multi_req_perform","text":"reqs list requests. paths optional character vector paths, want download request bodies disk. supplied, must length reqs. pool Optionally, curl pool made curl::new_pool(). Supply want override defaults total concurrent connections (100) concurrent connections per host (6). cancel_on_error pending requests cancelled hit error? Set TRUE stop requests soon hit error. Responses never performed NULL result.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/oauth_cache_path.html","id":null,"dir":"Reference","previous_headings":"","what":"httr2 OAuth cache location — oauth_cache_path","title":"httr2 OAuth cache location — oauth_cache_path","text":"opted-, httr2 caches OAuth tokens directory. default, uses OS-standard cache directory, , needed, can override location setting HTTR2_OAUTH_CACHE env var.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/oauth_cache_path.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"httr2 OAuth cache location — oauth_cache_path","text":"","code":"oauth_cache_path()"},{"path":"https://httr2.r-lib.org/dev/reference/oauth_client.html","id":null,"dir":"Reference","previous_headings":"","what":"Create an OAuth client — oauth_client","title":"Create an OAuth client — oauth_client","text":"OAuth app combination client, set endpoints (.e. urls various requests sent), authentication mechanism. client consists least client_id, also often client_secret. get values create client API's website.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/oauth_client.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create an OAuth client — oauth_client","text":"","code":"oauth_client( id, token_url, secret = NULL, key = NULL, auth = c(\"body\", \"header\", \"jwt_sig\"), auth_params = list(), name = hash(id) )"},{"path":"https://httr2.r-lib.org/dev/reference/oauth_client.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create an OAuth client — oauth_client","text":"id Client identifier. token_url Url retrieve access token. secret Client secret. apps, technically confidential principle avoid storing source code. However, many APIs require order provide user friendly authentication experience, risks including usually low. make things little safer, recommend using obfuscate() recording client secret public code. key Client key. alternative using secret, can instead supply confidential private key. never included package. auth Authentication mechanism used client prove API. Can one three built-methods (\"body\", \"header\", \"jwt\"), function called arguments req, client, contents auth_params. common mechanism wild \"body\" client_id (optionally) client_secret added body. \"header\" sends client_id client_secret HTTP Authorization header. \"jwt_sig\" generate JWT, include client_assertion field body. See oauth_client_req_auth() details. auth_params Additional parameters passed function specified auth. name Optional name client. Used generating cache directory. NULL, generated hash client_id. defining client use package, recommend use package name.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/oauth_client.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create an OAuth client — oauth_client","text":"OAuth client: S3 list class httr2_oauth_client.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/oauth_client.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create an OAuth client — oauth_client","text":"","code":"oauth_client(\"myclient\", \"http://example.com/token_url\", secret = \"DONTLOOK\") #> #> name: 920903ca1274bc747bb367c6b5abe4a4 #> id: myclient #> secret: #> token_url: http://example.com/token_url #> auth: oauth_client_req_auth_body"},{"path":"https://httr2.r-lib.org/dev/reference/oauth_client_req_auth.html","id":null,"dir":"Reference","previous_headings":"","what":"OAuth client authentication — oauth_client_req_auth","title":"OAuth client authentication — oauth_client_req_auth","text":"oauth_client_req_auth() authenticates request using authentication strategy defined auth auth_param arguments oauth_client(). used authenticate client part OAuth flow, authenticate request behalf user. three built-strategies: oauth_client_req_body() adds client id (optionally) secret request body, described Section 2.3.1 RFC 6749. oauth_client_req_header() adds client id secret using HTTP basic authentication Authorization header, described Section 2.3.1 RFC 6749. oauth_client_jwt_rs256() adds client assertion body using JWT signed jwt_sign_rs256() using private key, described Section 2.2 RFC 7523. generally call functions directly instead specify auth argument oauth_client(). req client parameters automatically filled ; parameters come auth_params argument.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/oauth_client_req_auth.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"OAuth client authentication — oauth_client_req_auth","text":"","code":"oauth_client_req_auth(req, client) oauth_client_req_auth_header(req, client) oauth_client_req_auth_body(req, client) oauth_client_req_auth_jwt_sig(req, client, claim, size = 256, header = list())"},{"path":"https://httr2.r-lib.org/dev/reference/oauth_client_req_auth.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"OAuth client authentication — oauth_client_req_auth","text":"req httr2 request object. client oauth_client. claim Claim set produced jwt_claim(). size Size, bits, sha2 signature, .e. 256, 384 512. HMAC/RSA, applicable ECDSA keys. header named list giving additional fields include JWT header.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/oauth_client_req_auth.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"OAuth client authentication — oauth_client_req_auth","text":"modified HTTP request.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/oauth_client_req_auth.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"OAuth client authentication — oauth_client_req_auth","text":"","code":"# Show what the various forms of client authentication look like req <- request(\"https://example.com/whoami\") client1 <- oauth_client( id = \"12345\", secret = \"56789\", token_url = \"https://example.com/oauth/access_token\", name = \"oauth-example\", auth = \"body\" # the default ) # calls oauth_client_req_auth_body() req_dry_run(oauth_client_req_auth(req, client1)) #> POST /whoami HTTP/1.1 #> Host: example.com #> User-Agent: httr2/1.0.3.9000 r-curl/5.2.2 libcurl/7.81.0 #> Accept: */* #> Accept-Encoding: deflate, gzip, br, zstd #> Content-Type: application/x-www-form-urlencoded #> Content-Length: 35 #> #> client_id=12345&client_secret=56789 client2 <- oauth_client( id = \"12345\", secret = \"56789\", token_url = \"https://example.com/oauth/access_token\", name = \"oauth-example\", auth = \"header\" ) # calls oauth_client_req_auth_header() req_dry_run(oauth_client_req_auth(req, client2)) #> GET /whoami HTTP/1.1 #> Host: example.com #> User-Agent: httr2/1.0.3.9000 r-curl/5.2.2 libcurl/7.81.0 #> Accept: */* #> Accept-Encoding: deflate, gzip, br, zstd #> Authorization: #> client3 <- oauth_client( id = \"12345\", key = openssl::rsa_keygen(), token_url = \"https://example.com/oauth/access_token\", name = \"oauth-example\", auth = \"jwt_sig\", auth_params = list(claim = jwt_claim()) ) # calls oauth_client_req_auth_header_jwt_sig() req_dry_run(oauth_client_req_auth(req, client3)) #> POST /whoami HTTP/1.1 #> Host: example.com #> User-Agent: httr2/1.0.3.9000 r-curl/5.2.2 libcurl/7.81.0 #> Accept: */* #> Accept-Encoding: deflate, gzip, br, zstd #> Content-Type: application/x-www-form-urlencoded #> Content-Length: 623 #> #> client_assertion=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJleHAiOjE3MjU4ODgzODYsIm5iZiI6MTcyNTg4ODA4NiwiaWF0IjoxNzI1ODg4MDg2LCJqdGkiOiJrU01USHFkRXhRcTE4V0xFZVZXY2E5WVBkTlBSdzRETjF6dzdyaWFneERFIn0.oFJgXziZLH94uxFaeeH3sEaP22GZtuSi-u12HZPYpc6_kmrNf7RWeDfMxFnUa-EfMz_n8qcy557IQ3JbMjz7ltAo3IeguwG9I5ZURKOazmreEnPAgGIihXPYJ_jVvckRngadjakD9ktHYXAgizN9JbCrCsMisDzc2t6Z-jrVGCsgqAfoOKxSbMlcK-FzVLRJimvBEpUFfeN_MCQhQEcVInI-EACAFQNldu4iVW3IAhaxa-7gWMTupi8bWSUWbFXPQ-lOr6G3ymlNP7sQCj1BcD9VbM1C2oZrfIKhMwRLXepvucS50nNsnn5oRTaXYaipzeYk3IUZuLqoKJ2GRGnGKQ&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer"},{"path":"https://httr2.r-lib.org/dev/reference/oauth_flow_auth_code_url.html","id":null,"dir":"Reference","previous_headings":"","what":"OAuth authorization code components — oauth_flow_auth_code_url","title":"OAuth authorization code components — oauth_flow_auth_code_url","text":"low-level functions can used assemble custom flow APIs spec: oauth_flow_auth_code_url() generates url opened browser. oauth_flow_auth_code_listen() starts temporary local webserver listens response resource server. oauth_flow_auth_code_parse() parses query parameters returned server redirect, verifying state correct, returning authorisation code. oauth_flow_auth_code_pkce() generates code verifier, method, challenge components needed PKCE, defined RFC 7636.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/oauth_flow_auth_code_url.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"OAuth authorization code components — oauth_flow_auth_code_url","text":"","code":"oauth_flow_auth_code_url( client, auth_url, redirect_uri = NULL, scope = NULL, state = NULL, auth_params = list() ) oauth_flow_auth_code_listen(redirect_uri = \"http://localhost:1410\") oauth_flow_auth_code_parse(query, state) oauth_flow_auth_code_pkce()"},{"path":"https://httr2.r-lib.org/dev/reference/oauth_flow_auth_code_url.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"OAuth authorization code components — oauth_flow_auth_code_url","text":"state Random state generated oauth_flow_auth_code(). Used verify working authentication request created. (unlikely threat R packages since webserver listens authorization responses transient.) query List query parameters returned oauth_flow_auth_code_listen().","code":""},{"path":"https://httr2.r-lib.org/dev/reference/oauth_redirect_uri.html","id":null,"dir":"Reference","previous_headings":"","what":"Default redirect url for OAuth — oauth_redirect_uri","title":"Default redirect url for OAuth — oauth_redirect_uri","text":"default redirect uri used req_oauth_auth_code(). Defaults http://localhost unless HTTR2_OAUTH_REDIRECT_URL envvar set.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/oauth_redirect_uri.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Default redirect url for OAuth — oauth_redirect_uri","text":"","code":"oauth_redirect_uri()"},{"path":"https://httr2.r-lib.org/dev/reference/oauth_token.html","id":null,"dir":"Reference","previous_headings":"","what":"Create an OAuth token — oauth_token","title":"Create an OAuth token — oauth_token","text":"Creates S3 object class representing OAuth token returned access token endpoint.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/oauth_token.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create an OAuth token — oauth_token","text":"","code":"oauth_token( access_token, token_type = \"bearer\", expires_in = NULL, refresh_token = NULL, ..., .date = Sys.time() )"},{"path":"https://httr2.r-lib.org/dev/reference/oauth_token.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create an OAuth token — oauth_token","text":"access_token access token used authenticate request token_type Type token; \"bearer\" currently supported. expires_in Number seconds token expires. refresh_token Optional refresh token; supplied, can used cheaply get new access token one expires. ... Additional components returned endpoint .date Date request made; used convert relative expires_in absolute expires_at.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/oauth_token.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create an OAuth token — oauth_token","text":"OAuth token: S3 list class httr2_token.","code":""},{"path":[]},{"path":"https://httr2.r-lib.org/dev/reference/oauth_token.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create an OAuth token — oauth_token","text":"","code":"oauth_token(\"abcdef\") #> #> token_type: bearer #> access_token: oauth_token(\"abcdef\", expires_in = 3600) #> #> token_type: bearer #> access_token: #> expires_at: 2024-09-09 14:21:26 oauth_token(\"abcdef\", refresh_token = \"ghijkl\") #> #> token_type: bearer #> access_token: #> refresh_token: "},{"path":"https://httr2.r-lib.org/dev/reference/oauth_token_cached.html","id":null,"dir":"Reference","previous_headings":"","what":"Retrieve an OAuth token using the cache — oauth_token_cached","title":"Retrieve an OAuth token using the cache — oauth_token_cached","text":"function wraps around oauth_flow_ function retrieve token cache, generate cache token needed. Use manual token management still takes advantage httr2's caching system. need use function passing token","code":""},{"path":"https://httr2.r-lib.org/dev/reference/oauth_token_cached.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Retrieve an OAuth token using the cache — oauth_token_cached","text":"","code":"oauth_token_cached( client, flow, flow_params = list(), cache_disk = FALSE, cache_key = NULL, reauth = FALSE )"},{"path":"https://httr2.r-lib.org/dev/reference/oauth_token_cached.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Retrieve an OAuth token using the cache — oauth_token_cached","text":"client oauth_client(). flow oauth_flow_ function used generate access token. flow_params Parameters flow. named list whose names match argument names flow. cache_disk access token cached disk? reduces number times need re-authenticate cost storing access credentials disk. Learn https://httr2.r-lib.org/articles/oauth.html. cache_key want cache multiple tokens per app, use key disambiguate . reauth Set TRUE force re-authentication via flow, regardless whether token expired.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/oauth_token_cached.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Retrieve an OAuth token using the cache — oauth_token_cached","text":"","code":"if (FALSE) { # \\dontrun{ token <- oauth_token_cached( client = example_github_client(), flow = oauth_flow_auth_code, flow_params = list( auth_url = \"https://github.com/login/oauth/authorize\" ), cache_disk = TRUE ) token } # }"},{"path":"https://httr2.r-lib.org/dev/reference/obfuscate.html","id":null,"dir":"Reference","previous_headings":"","what":"Obfuscate mildly secret information — obfuscate","title":"Obfuscate mildly secret information — obfuscate","text":"Use obfuscate(\"value\") generate call obfuscated(), unobfuscate value last possible moment. Obfuscated values work limited locations: secret argument oauth_client() Elements data argument req_body_form(), req_body_json(), req_body_multipart(). Working together pair functions provides way obfuscate mildly confidential information, like OAuth client secrets. secret can revealed inspecting source code, skilled R programmer figure effort. main goal protect scraping; way automated tool grab obfuscated secrets.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/obfuscate.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Obfuscate mildly secret information — obfuscate","text":"","code":"obfuscate(x) obfuscated(x)"},{"path":"https://httr2.r-lib.org/dev/reference/obfuscate.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Obfuscate mildly secret information — obfuscate","text":"x string obfuscate, mark obfuscated.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/obfuscate.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Obfuscate mildly secret information — obfuscate","text":"obfuscate() prints obfuscated() call include code. obfuscated() returns S3 class marking string obfuscated can unobfuscated needed.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/obfuscate.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Obfuscate mildly secret information — obfuscate","text":"","code":"obfuscate(\"good morning\") #> obfuscated(\"LKTcAs2kdMPKQ1QpzeTj5uZJLM9o-1hEs6tH9A\") # Every time you obfuscate you'll get a different value because it # includes 16 bytes of random data which protects against certain types of # brute force attack obfuscate(\"good morning\") #> obfuscated(\"A_quoF_NDZGqYQQcoqnK9lfN97THONA2B_rqPQ\")"},{"path":"https://httr2.r-lib.org/dev/reference/pipe.html","id":null,"dir":"Reference","previous_headings":"","what":"Pipe operator — %>%","title":"Pipe operator — %>%","text":"See magrittr::%>% details.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/pipe.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Pipe operator — %>%","text":"","code":"lhs %>% rhs"},{"path":"https://httr2.r-lib.org/dev/reference/pipe.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Pipe operator — %>%","text":"lhs value magrittr placeholder. rhs function call using magrittr semantics.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/pipe.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Pipe operator — %>%","text":"result calling rhs(lhs).","code":""},{"path":"https://httr2.r-lib.org/dev/reference/progress_bars.html","id":null,"dir":"Reference","previous_headings":"","what":"Progress bars in httr2 — progress_bars","title":"Progress bars in httr2 — progress_bars","text":"httr2's perform functions progress argument can use create progress bar. progress can : FALSE, default: create progress bar. TRUE: creates basic unnamed progress bar. string: creates basic progress bar given name. named list progress bar parameters, described . good practice name progress bars, make clear calculation process belong . recommend keeping names 20 characters, whole progress bar fits comfortably even narrower displays.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/progress_bars.html","id":"progress-bar-parameters","dir":"Reference","previous_headings":"","what":"Progress bar parameters","title":"Progress bars in httr2 — progress_bars","text":"clear: whether remove progress bar screen termination. Defaults TRUE. format: format string. overrides default format string progress bar type. must given custom type. Format strings may contain R expressions evaluate braces. support cli pluralization, styling can contain special progress variables. format_done: format string successful termination. default format. format_failed: format string unsuccessful termination. default format. name: progress bar name. default empty string displayed beginning progress bar. show_after: numeric scalar. show progress bar number seconds. overrides cli.progress_show_after global option. type: progress bar type. Currently supported types : iterator: default, loop mapping function, tasks: (typically small) number tasks, download: download one file, custom: custom type, format must NULL type. default display different progress bar type.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/progress_bars.html","id":"further-documentation","dir":"Reference","previous_headings":"","what":"Further documentation","title":"Progress bars in httr2 — progress_bars","text":"purrr's progress bars powered cli, see Introduction progress bars cli Advanced cli progress bars details.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_auth_basic.html","id":null,"dir":"Reference","previous_headings":"","what":"Authenticate request with HTTP basic authentication — req_auth_basic","title":"Authenticate request with HTTP basic authentication — req_auth_basic","text":"sets Authorization header. See details https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_auth_basic.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Authenticate request with HTTP basic authentication — req_auth_basic","text":"","code":"req_auth_basic(req, username, password = NULL)"},{"path":"https://httr2.r-lib.org/dev/reference/req_auth_basic.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Authenticate request with HTTP basic authentication — req_auth_basic","text":"req httr2 request object. username User name. password Password. avoid entering password directly calling function captured .Rhistory. Instead, leave unset default behaviour prompt interactively.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_auth_basic.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Authenticate request with HTTP basic authentication — req_auth_basic","text":"modified HTTP request.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_auth_basic.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Authenticate request with HTTP basic authentication — req_auth_basic","text":"","code":"req <- request(\"http://example.com\") |> req_auth_basic(\"hadley\", \"SECRET\") req #> #> GET http://example.com #> Headers: #> • Authorization: '' #> Body: empty req |> req_dry_run() #> GET / HTTP/1.1 #> Host: example.com #> User-Agent: httr2/1.0.3.9000 r-curl/5.2.2 libcurl/7.81.0 #> Accept: */* #> Accept-Encoding: deflate, gzip, br, zstd #> Authorization: #> # httr2 does its best to redact the Authorization header so that you don't # accidentally reveal confidential data. Use `redact_headers` to reveal it: print(req, redact_headers = FALSE) #> #> GET http://example.com #> Headers: #> • Authorization: 'Basic aGFkbGV5OlNFQ1JFVA==' #> Body: empty req |> req_dry_run(redact_headers = FALSE) #> GET / HTTP/1.1 #> Host: example.com #> User-Agent: httr2/1.0.3.9000 r-curl/5.2.2 libcurl/7.81.0 #> Accept: */* #> Accept-Encoding: deflate, gzip, br, zstd #> Authorization: Basic aGFkbGV5OlNFQ1JFVA== #> # We do this because the authorization header is not encrypted and the # so password can easily be discovered: rawToChar(jsonlite::base64_dec(\"aGFkbGV5OlNFQ1JFVA==\")) #> [1] \"hadley:SECRET\""},{"path":"https://httr2.r-lib.org/dev/reference/req_auth_bearer_token.html","id":null,"dir":"Reference","previous_headings":"","what":"Authenticate request with bearer token — req_auth_bearer_token","title":"Authenticate request with bearer token — req_auth_bearer_token","text":"bearer token gives bearer access confidential resources (keep secure like user name password). usually produced large authentication scheme (like various OAuth 2.0 flows), sometimes given directly.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_auth_bearer_token.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Authenticate request with bearer token — req_auth_bearer_token","text":"","code":"req_auth_bearer_token(req, token)"},{"path":"https://httr2.r-lib.org/dev/reference/req_auth_bearer_token.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Authenticate request with bearer token — req_auth_bearer_token","text":"req httr2 request object. token bearer token","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_auth_bearer_token.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Authenticate request with bearer token — req_auth_bearer_token","text":"modified HTTP request.","code":""},{"path":[]},{"path":"https://httr2.r-lib.org/dev/reference/req_auth_bearer_token.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Authenticate request with bearer token — req_auth_bearer_token","text":"","code":"req <- request(\"http://example.com\") |> req_auth_bearer_token(\"sdaljsdf093lkfs\") req #> #> GET http://example.com #> Headers: #> • Authorization: '' #> Body: empty # httr2 does its best to redact the Authorization header so that you don't # accidentally reveal confidential data. Use `redact_headers` to reveal it: print(req, redact_headers = FALSE) #> #> GET http://example.com #> Headers: #> • Authorization: 'Bearer sdaljsdf093lkfs' #> Body: empty"},{"path":"https://httr2.r-lib.org/dev/reference/req_body.html","id":null,"dir":"Reference","previous_headings":"","what":"Send data in request body — req_body","title":"Send data in request body — req_body","text":"req_body_file() sends local file. req_body_raw() sends string raw vector. req_body_json() sends JSON encoded data. Named components data can later modified req_body_json_modify(). req_body_form() sends form encoded data. req_body_multipart() creates multi-part body. Adding body request automatically switch method POST.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_body.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Send data in request body — req_body","text":"","code":"req_body_raw(req, body, type = NULL) req_body_file(req, path, type = NULL) req_body_json( req, data, auto_unbox = TRUE, digits = 22, null = \"null\", type = \"application/json\", ... ) req_body_json_modify(req, ...) req_body_form(.req, ..., .multi = c(\"error\", \"comma\", \"pipe\", \"explode\")) req_body_multipart(.req, ...)"},{"path":"https://httr2.r-lib.org/dev/reference/req_body.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Send data in request body — req_body","text":"req, .req httr2 request object. body literal string raw vector send body. type MIME content type. generally need specify defaults usually pretty good, e.g. req_body_file() guess extension path. ignored manually set Content-Type header. path Path file upload. data Data include body. auto_unbox length-1 vectors automatically \"unboxed\" JSON scalars? digits many digits precision numbers use JSON? null NULL translated JSON's null (\"null\") empty list (\"list\"). ... Name-data pairs used send data body. req_body_form(), values must strings (things easily coerced strings); req_body_multipart() values must strings objects produced curl::form_file()/curl::form_data(). req_body_json_modify(), simple data made atomic vectors lists. req_body_json() uses argument differently; takes additional arguments passed jsonlite::toJSON(). .multi Controls happens element ... vector containing multiple values: \"error\", default, throws error. \"comma\", separates values ,, e.g. ?x=1,2. \"pipe\", separates values |, e.g. ?x=1|2. \"explode\", turns element parameter, e.g. ?x=1&x=2. none functions work, can alternatively supply function takes character vector returns string.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_body.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Send data in request body — req_body","text":"modified HTTP request.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_body.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Send data in request body — req_body","text":"","code":"req <- request(example_url()) |> req_url_path(\"/post\") # Most APIs expect small amounts of data in either form or json encoded: req |> req_body_form(x = \"A simple text string\") |> req_dry_run() #> POST /post HTTP/1.1 #> Host: 127.0.0.1:45107 #> User-Agent: httr2/1.0.3.9000 r-curl/5.2.2 libcurl/7.81.0 #> Accept: */* #> Accept-Encoding: deflate, gzip, br, zstd #> Content-Type: application/x-www-form-urlencoded #> Content-Length: 28 #> #> x=A%20simple%20text%20string req |> req_body_json(list(x = \"A simple text string\")) |> req_dry_run() #> POST /post HTTP/1.1 #> Host: 127.0.0.1:45107 #> User-Agent: httr2/1.0.3.9000 r-curl/5.2.2 libcurl/7.81.0 #> Accept: */* #> Accept-Encoding: deflate, gzip, br, zstd #> Content-Type: application/json #> Content-Length: 28 #> #> {\"x\":\"A simple text string\"} # For total control over the body, send a string or raw vector req |> req_body_raw(\"A simple text string\") |> req_dry_run() #> POST /post HTTP/1.1 #> Host: 127.0.0.1:45107 #> User-Agent: httr2/1.0.3.9000 r-curl/5.2.2 libcurl/7.81.0 #> Accept: */* #> Accept-Encoding: deflate, gzip, br, zstd #> Content-Length: 20 #> #> A simple text string # There are two main ways that APIs expect entire files path <- tempfile() writeLines(letters[1:6], path) # You can send a single file as the body: req |> req_body_file(path) |> req_dry_run() #> POST /post HTTP/1.1 #> Host: 127.0.0.1:45107 #> User-Agent: httr2/1.0.3.9000 r-curl/5.2.2 libcurl/7.81.0 #> Accept: */* #> Accept-Encoding: deflate, gzip, br, zstd #> Content-Length: 12 #> #> a #> b #> c #> d #> e #> f # You can send multiple files, or a mix of files and data # with multipart encoding req |> req_body_multipart(a = curl::form_file(path), b = \"some data\") |> req_dry_run() #> POST /post HTTP/1.1 #> Host: 127.0.0.1:45107 #> User-Agent: httr2/1.0.3.9000 r-curl/5.2.2 libcurl/7.81.0 #> Accept: */* #> Accept-Encoding: deflate, gzip, br, zstd #> Content-Length: 315 #> Content-Type: multipart/form-data; boundary=------------------------2ffa961708fc634d #> #> --------------------------2ffa961708fc634d #> Content-Disposition: form-data; name=\"a\"; filename=\"file1727a8d346c\" #> Content-Type: application/octet-stream #> #> a #> b #> c #> d #> e #> f #> #> --------------------------2ffa961708fc634d #> Content-Disposition: form-data; name=\"b\" #> #> some data #> --------------------------2ffa961708fc634d--"},{"path":"https://httr2.r-lib.org/dev/reference/req_cache.html","id":null,"dir":"Reference","previous_headings":"","what":"Automatically cache requests — req_cache","title":"Automatically cache requests — req_cache","text":"Use req_perform() automatically cache HTTP requests. API requests cacheable, static files often . req_cache() caches responses GET requests status code 200 least one standard caching headers (e.g. Expires, Etag, Last-Modified, Cache-Control), unless caching expressly prohibited Cache-Control: -store. Typically, request still sent server check cached value still --date, need re-download body value. learn HTTP caching, recommend MDN article HTTP caching.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_cache.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Automatically cache requests — req_cache","text":"","code":"req_cache( req, path, use_on_error = FALSE, debug = getOption(\"httr2_cache_debug\", FALSE), max_age = Inf, max_n = Inf, max_size = 1024^3 )"},{"path":"https://httr2.r-lib.org/dev/reference/req_cache.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Automatically cache requests — req_cache","text":"req httr2 request object. path Path cache directory. created automatically exist. quick easy caching within session, can use tempfile(). cache requests within package, can use something like file.path(tools::R_user_dir(\"pkgdown\", \"cache\"), \"httr2\"). httr2 provide helpers manage cache, want empty , can use something like unlink(dir(cache_path, full.names = TRUE)). use_on_error request errors, cache response, req_perform() return instead generating error? debug TRUE emit useful messages telling cache hits misses. can helpful understand whether caching actually anything use case. max_n, max_age, max_size Automatically prune cache specifying one : max_age: delete files older number seconds. max_n: delete files (oldest newest) preserve many files. max_size: delete files (oldest newest) preserve many bytes. cache pruning performed per minute.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_cache.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Automatically cache requests — req_cache","text":"modified HTTP request.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_cache.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Automatically cache requests — req_cache","text":"","code":"# GitHub uses HTTP caching for all raw files. url <- paste0( \"https://raw.githubusercontent.com/allisonhorst/palmerpenguins/\", \"master/inst/extdata/penguins.csv\" ) # Here I set debug = TRUE so you can see what's happening req <- request(url) |> req_cache(tempdir(), debug = TRUE) # First request downloads the data resp <- req |> req_perform() #> Pruning cache #> Saving response to cache \"d5d1ddd7f99f55dbc920c63f942804c0\" # Second request retrieves it from the cache resp <- req |> req_perform() #> Found url in cache \"d5d1ddd7f99f55dbc920c63f942804c0\" #> Cached value is fresh; using response from cache"},{"path":"https://httr2.r-lib.org/dev/reference/req_cookie_preserve.html","id":null,"dir":"Reference","previous_headings":"","what":"Set and preserve cookies — req_cookie_preserve","title":"Set and preserve cookies — req_cookie_preserve","text":"Use req_cookie_set() set client side cookies sent server. default, httr2 uses clean slate every request meaning cookies automatically preserved across requests. preserve cookies, use req_cookie_preserve() along path cookie file read updated request.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_cookie_preserve.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set and preserve cookies — req_cookie_preserve","text":"","code":"req_cookie_preserve(req, path) req_cookies_set(req, ...)"},{"path":"https://httr2.r-lib.org/dev/reference/req_cookie_preserve.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set and preserve cookies — req_cookie_preserve","text":"req httr2 request object. path path file cookies read updated request. ... Name-value pairs define query parameters. value must atomic vector, automatically escaped. opt-escaping, wrap strings ().","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_cookie_preserve.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Set and preserve cookies — req_cookie_preserve","text":"","code":"# Use `req_cookies_set()` to set client-side cookies request(example_url()) |> req_cookies_set(a = 1, b = 1) |> req_dry_run() #> GET / HTTP/1.1 #> Host: 127.0.0.1:45107 #> User-Agent: httr2/1.0.3.9000 r-curl/5.2.2 libcurl/7.81.0 #> Accept: */* #> Accept-Encoding: deflate, gzip, br, zstd #> Cookie: a=1;b=1 #> # Use `req_cookie_preserve()` to preserve server-side cookies across requests path <- tempfile() # Set a server-side cookie request(example_url()) |> req_cookie_preserve(path) |> req_template(\"/cookies/set/:name/:value\", name = \"chocolate\", value = \"chip\") |> req_perform() |> resp_body_json() #> $cookies #> $cookies$chocolate #> [1] \"chip\" #> #> # Set another sever-side cookie request(example_url()) |> req_cookie_preserve(path) |> req_template(\"/cookies/set/:name/:value\", name = \"oatmeal\", value = \"raisin\") |> req_perform() |> resp_body_json() #> $cookies #> $cookies$chocolate #> [1] \"chip\" #> #> $cookies$oatmeal #> [1] \"raisin\" #> #> # Add a client side cookie request(example_url()) |> req_url_path(\"/cookies/set\") |> req_cookie_preserve(path) |> req_cookies_set(snicker = \"doodle\") |> req_perform() |> resp_body_json() #> $cookies #> $cookies$chocolate #> [1] \"chip\" #> #> $cookies$oatmeal #> [1] \"raisin\" #> #> $cookies$snicker #> [1] \"doodle\" #> #> # The cookie path has a straightforward format cat(readChar(path, nchars = 1e4)) #> # Netscape HTTP Cookie File #> # https://curl.se/docs/http-cookies.html #> # This file was generated by libcurl! Edit at your own risk. #> #> 127.0.0.1\tFALSE\t/\tFALSE\t0\tchocolate\tchip #> 127.0.0.1\tFALSE\t/\tFALSE\t0\toatmeal\traisin"},{"path":"https://httr2.r-lib.org/dev/reference/req_dry_run.html","id":null,"dir":"Reference","previous_headings":"","what":"Perform a dry run — req_dry_run","title":"Perform a dry run — req_dry_run","text":"shows exactly httr2 send server, without actually sending anything. requires httpuv package works sending real HTTP request local webserver, thanks magic curl::curl_echo().","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_dry_run.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Perform a dry run — req_dry_run","text":"","code":"req_dry_run(req, quiet = FALSE, redact_headers = TRUE)"},{"path":"https://httr2.r-lib.org/dev/reference/req_dry_run.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Perform a dry run — req_dry_run","text":"req httr2 request object. quiet TRUE print anything. redact_headers Redact confidential data headers? Currently redacts contents Authorization header prevent accidentally leaking credentials debugging/reprexing.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_dry_run.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Perform a dry run — req_dry_run","text":"Invisibly, list containing information request, including method, path, headers.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_dry_run.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Perform a dry run — req_dry_run","text":"","code":"# httr2 adds default User-Agent, Accept, and Accept-Encoding headers request(\"http://example.com\") |> req_dry_run() #> GET / HTTP/1.1 #> Host: example.com #> User-Agent: httr2/1.0.3.9000 r-curl/5.2.2 libcurl/7.81.0 #> Accept: */* #> Accept-Encoding: deflate, gzip, br, zstd #> # the Authorization header is automatically redacted to avoid leaking # credentials on the console req <- request(\"http://example.com\") |> req_auth_basic(\"user\", \"password\") req |> req_dry_run() #> GET / HTTP/1.1 #> Host: example.com #> User-Agent: httr2/1.0.3.9000 r-curl/5.2.2 libcurl/7.81.0 #> Accept: */* #> Accept-Encoding: deflate, gzip, br, zstd #> Authorization: #> # if you need to see it, use redact_headers = FALSE req |> req_dry_run(redact_headers = FALSE) #> GET / HTTP/1.1 #> Host: example.com #> User-Agent: httr2/1.0.3.9000 r-curl/5.2.2 libcurl/7.81.0 #> Accept: */* #> Accept-Encoding: deflate, gzip, br, zstd #> Authorization: Basic dXNlcjpwYXNzd29yZA== #>"},{"path":"https://httr2.r-lib.org/dev/reference/req_error.html","id":null,"dir":"Reference","previous_headings":"","what":"Control handling of HTTP errors — req_error","title":"Control handling of HTTP errors — req_error","text":"req_perform() automatically convert HTTP errors (.e. 4xx 5xx status code) R errors. Use req_error() either override defaults, extract additional information response useful expose user.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_error.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Control handling of HTTP errors — req_error","text":"","code":"req_error(req, is_error = NULL, body = NULL)"},{"path":"https://httr2.r-lib.org/dev/reference/req_error.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Control handling of HTTP errors — req_error","text":"req httr2 request object. is_error predicate function takes single argument (response) returns TRUE FALSE indicating whether R error signalled. body callback function takes single argument (response) returns character vector additional information include body error. vector passed along message argument rlang::abort() can use formatting supports.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_error.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Control handling of HTTP errors — req_error","text":"modified HTTP request.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_error.html","id":"error-handling","dir":"Reference","previous_headings":"","what":"Error handling","title":"Control handling of HTTP errors — req_error","text":"req_perform() designed succeed get valid HTTP response. two ways request can fail: HTTP request might fail, example connection dropped server exist. type error class c(\"httr2_failure\", \"httr2_error\"). HTTP request might succeed, return HTTP status code represents error, e.g. 404 Found specified resource found. type error (e.g.) class c(\"httr2_http_404\", \"httr2_http\", \"httr2_error\"). error classes designed used conjunction R's condition handling tools (https://adv-r.hadley.nz/conditions.html). example, want return default value server returns 404, use tryCatch(): want re-throw error additional context, use withCallingHandlers(), e.g.: Learn error chaining rlang::topic-error-chaining.","code":"tryCatch( req |> req_perform() |> resp_body_json(), httr2_http_404 = function(cnd) NULL ) withCallingHandlers( req |> req_perform() |> resp_body_json(), httr2_http_404 = function(cnd) { rlang::abort(\"Couldn't find user\", parent = cnd) } )"},{"path":[]},{"path":"https://httr2.r-lib.org/dev/reference/req_error.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Control handling of HTTP errors — req_error","text":"","code":"# Performing this request usually generates an error because httr2 # converts HTTP errors into R errors: req <- request(example_url()) |> req_url_path(\"/status/404\") try(req |> req_perform()) #> Error in req_perform(req) : HTTP 404 Not Found. # You can still retrieve it with last_response() last_response() #> #> GET http://127.0.0.1:45107/status/404 #> Status: 404 Not Found #> Content-Type: text/plain #> Body: None # But you might want to suppress this behaviour: resp <- req |> req_error(is_error = \\(resp) FALSE) |> req_perform() resp #> #> GET http://127.0.0.1:45107/status/404 #> Status: 404 Not Found #> Content-Type: text/plain #> Body: None # Or perhaps you're working with a server that routinely uses the # wrong HTTP error codes only 500s are really errors request(\"http://example.com\") |> req_error(is_error = \\(resp) resp_status(resp) == 500) #> #> GET http://example.com #> Body: empty #> Policies: #> • error_is_error: a function # Most typically you'll use req_error() to add additional information # extracted from the response body (or sometimes header): error_body <- function(resp) { resp_body_json(resp)$error } request(\"http://example.com\") |> req_error(body = error_body) #> #> GET http://example.com #> Body: empty #> Policies: #> • error_body: a function # Learn more in https://httr2.r-lib.org/articles/wrapping-apis.html"},{"path":"https://httr2.r-lib.org/dev/reference/req_headers.html","id":null,"dir":"Reference","previous_headings":"","what":"Modify request headers — req_headers","title":"Modify request headers — req_headers","text":"req_headers() allows set value header.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_headers.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Modify request headers — req_headers","text":"","code":"req_headers(.req, ..., .redact = NULL)"},{"path":"https://httr2.r-lib.org/dev/reference/req_headers.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Modify request headers — req_headers","text":".req request. ... Name-value pairs headers values. Use NULL reset value httr2's default Use \"\" remove header Use character vector repeat header. .redact Headers redact. NULL, default, added headers redacted.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_headers.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Modify request headers — req_headers","text":"modified HTTP request.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_headers.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Modify request headers — req_headers","text":"","code":"req <- request(\"http://example.com\") # Use req_headers() to add arbitrary additional headers to the request req |> req_headers(MyHeader = \"MyValue\") |> req_dry_run() #> GET / HTTP/1.1 #> Host: example.com #> User-Agent: httr2/1.0.3.9000 r-curl/5.2.2 libcurl/7.81.0 #> Accept: */* #> Accept-Encoding: deflate, gzip, br, zstd #> MyHeader: MyValue #> # Repeated use overrides the previous value: req |> req_headers(MyHeader = \"Old value\") |> req_headers(MyHeader = \"New value\") |> req_dry_run() #> GET / HTTP/1.1 #> Host: example.com #> User-Agent: httr2/1.0.3.9000 r-curl/5.2.2 libcurl/7.81.0 #> Accept: */* #> Accept-Encoding: deflate, gzip, br, zstd #> MyHeader: New value #> # Setting Accept to NULL uses curl's default: req |> req_headers(Accept = NULL) |> req_dry_run() #> GET / HTTP/1.1 #> Host: example.com #> User-Agent: httr2/1.0.3.9000 r-curl/5.2.2 libcurl/7.81.0 #> Accept: */* #> Accept-Encoding: deflate, gzip, br, zstd #> # Setting it to \"\" removes it: req |> req_headers(Accept = \"\") |> req_dry_run() #> GET / HTTP/1.1 #> Host: example.com #> User-Agent: httr2/1.0.3.9000 r-curl/5.2.2 libcurl/7.81.0 #> Accept-Encoding: deflate, gzip, br, zstd #> # If you need to repeat a header, provide a vector of values # (this is rarely needed, but is important in a handful of cases) req |> req_headers(HeaderName = c(\"Value 1\", \"Value 2\", \"Value 3\")) |> req_dry_run() #> GET / HTTP/1.1 #> Host: example.com #> User-Agent: httr2/1.0.3.9000 r-curl/5.2.2 libcurl/7.81.0 #> Accept: */* #> Accept-Encoding: deflate, gzip, br, zstd #> HeaderName: Value 1 #> HeaderName: Value 2 #> HeaderName: Value 3 #> # If you have headers in a list, use !!! headers <- list(HeaderOne = \"one\", HeaderTwo = \"two\") req |> req_headers(!!!headers, HeaderThree = \"three\") |> req_dry_run() #> GET / HTTP/1.1 #> Host: example.com #> User-Agent: httr2/1.0.3.9000 r-curl/5.2.2 libcurl/7.81.0 #> Accept: */* #> Accept-Encoding: deflate, gzip, br, zstd #> HeaderOne: one #> HeaderTwo: two #> HeaderThree: three #> # Use `.redact` to hide a header in the output req |> req_headers(Secret = \"this-is-private\", Public = \"but-this-is-not\", .redact = \"Secret\") |> req_dry_run() #> GET / HTTP/1.1 #> Host: example.com #> User-Agent: httr2/1.0.3.9000 r-curl/5.2.2 libcurl/7.81.0 #> Accept: */* #> Accept-Encoding: deflate, gzip, br, zstd #> Secret: #> Public: but-this-is-not #>"},{"path":"https://httr2.r-lib.org/dev/reference/req_method.html","id":null,"dir":"Reference","previous_headings":"","what":"Set HTTP method in request — req_method","title":"Set HTTP method in request — req_method","text":"Use function use custom HTTP method like HEAD, DELETE, PATCH, UPDATE, OPTIONS. default method GET requests without body, POST requests body.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_method.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set HTTP method in request — req_method","text":"","code":"req_method(req, method)"},{"path":"https://httr2.r-lib.org/dev/reference/req_method.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set HTTP method in request — req_method","text":"req httr2 request object. method Custom HTTP method","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_method.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set HTTP method in request — req_method","text":"modified HTTP request.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_method.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Set HTTP method in request — req_method","text":"","code":"request(example_url()) |> req_method(\"PATCH\") #> #> PATCH http://127.0.0.1:45107/ #> Body: empty request(example_url()) |> req_method(\"PUT\") #> #> PUT http://127.0.0.1:45107/ #> Body: empty request(example_url()) |> req_method(\"HEAD\") #> #> HEAD http://127.0.0.1:45107/ #> Body: empty"},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth.html","id":null,"dir":"Reference","previous_headings":"","what":"OAuth authentication — req_oauth","title":"OAuth authentication — req_oauth","text":"low-level helper automatically authenticating request OAuth flow, caching access token refreshing possible. need use function implementing OAuth flow.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"OAuth authentication — req_oauth","text":"","code":"req_oauth(req, flow, flow_params, cache)"},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"OAuth authentication — req_oauth","text":"req httr2 request object. flow oauth_flow_ function used generate access token. flow_params Parameters flow. named list whose names match argument names flow. cache object controls token cached. list containing three functions: get() retrieves token cache, returning NULL cached yet. set() saves token cache. clear() removes token cache","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"OAuth authentication — req_oauth","text":"oauth_token.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_auth_code.html","id":null,"dir":"Reference","previous_headings":"","what":"OAuth with authorization code — req_oauth_auth_code","title":"OAuth with authorization code — req_oauth_auth_code","text":"Authenticate using OAuth authorization code flow, defined Section 4.1 RFC 6749. flow commonly used OAuth flow user opens page browser, approves access, returns R. possible, redirects browser back temporary local webserver capture authorization code. possible (e.g. running hosted platform like RStudio Server), provide custom redirect_uri httr2 prompt user enter code manually. Learn overall OAuth authentication flow https://httr2.r-lib.org/articles/oauth.html.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_auth_code.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"OAuth with authorization code — req_oauth_auth_code","text":"","code":"req_oauth_auth_code( req, client, auth_url, scope = NULL, pkce = TRUE, auth_params = list(), token_params = list(), redirect_uri = oauth_redirect_uri(), cache_disk = FALSE, cache_key = NULL, host_name = deprecated(), host_ip = deprecated(), port = deprecated() ) oauth_flow_auth_code( client, auth_url, scope = NULL, pkce = TRUE, auth_params = list(), token_params = list(), redirect_uri = oauth_redirect_uri(), host_name = deprecated(), host_ip = deprecated(), port = deprecated() )"},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_auth_code.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"OAuth with authorization code — req_oauth_auth_code","text":"req httr2 request object. client oauth_client(). auth_url Authorization url; need discover reading documentation. scope Scopes requested resource owner. pkce Use \"Proof Key Code Exchange\"? adds extra layer security always used supported server. auth_params list containing additional parameters passed oauth_flow_auth_code_url(). token_params List containing additional parameters passed token_url. redirect_uri URL redirect back authorization complete. Often must registered API advance. httr2 supports three forms redirect. Firstly, can use localhost url (default), httr2 set temporary webserver listen OAuth redirect. case, httr2 automatically append random port. need set fixed port API requires , specify (e.g.) \"http://localhost:1011\". technique works well working computer. Secondly, can provide URL website uses Javascript give user code copy paste back R session (see https://www.tidyverse.org/google-callback/ https://github.com/r-lib/gargle/blob/main/inst/pseudo-oob/google-callback/index.html examples). less convenient (requires user interaction) also works hosted environments like RStudio Server. Finally, hosted platforms might set HTTR2_OAUTH_REDIRECT_URL HTTR2_OAUTH_CODE_SOURCE_URL environment variables. case, httr2 use HTTR2_OAUTH_REDIRECT_URL redirects default, poll HTTR2_OAUTH_CODE_SOURCE_URL endpoint state parameter receives code response (encounters error). delegates completion authorization flow hosted platform. cache_disk access token cached disk? reduces number times need re-authenticate cost storing access credentials disk. Learn https://httr2.r-lib.org/articles/oauth.html. cache_key want cache multiple tokens per app, use key disambiguate . host_name, host_ip, port Now use redirect_uri instead.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_auth_code.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"OAuth with authorization code — req_oauth_auth_code","text":"req_oauth_auth_code() returns modified HTTP request use OAuth; oauth_flow_auth_code() returns oauth_token.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_auth_code.html","id":"security-considerations","dir":"Reference","previous_headings":"","what":"Security considerations","title":"OAuth with authorization code — req_oauth_auth_code","text":"authorization code flow used web applications native applications (equivalent R packages). RFC 8252 spells important considerations native apps. importantly way native apps keep secrets users. means server either require client_secret (.e. public client confidential client) ensure possession client_secret bestow meaningful rights. modern APIs bigger players (Azure, Google, etc) explicitly native apps. However, cases, even older APIs, possessing client_secret gives ability anything harmful, general principle fine include R package, long mildly obfuscated protect credential scraping. incentive steal client credentials takes less time create new client find client secret.","code":""},{"path":[]},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_auth_code.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"OAuth with authorization code — req_oauth_auth_code","text":"","code":"req_auth_github <- function(req) { req_oauth_auth_code( req, client = example_github_client(), auth_url = \"https://github.com/login/oauth/authorize\" ) } request(\"https://api.github.com/user\") |> req_auth_github() #> #> GET https://api.github.com/user #> Body: empty #> Policies: #> • auth_oauth: a list"},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_bearer_jwt.html","id":null,"dir":"Reference","previous_headings":"","what":"OAuth with a bearer JWT (JSON web token) — req_oauth_bearer_jwt","title":"OAuth with a bearer JWT (JSON web token) — req_oauth_bearer_jwt","text":"Authenticate using Bearer JWT (JSON web token) authorization grant get access token, defined Section 2.1 RFC 7523. often used service accounts, accounts used primarily automated environments. Learn overall OAuth authentication flow https://httr2.r-lib.org/articles/oauth.html.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_bearer_jwt.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"OAuth with a bearer JWT (JSON web token) — req_oauth_bearer_jwt","text":"","code":"req_oauth_bearer_jwt( req, client, claim, signature = \"jwt_encode_sig\", signature_params = list(), scope = NULL, token_params = list() ) oauth_flow_bearer_jwt( client, claim, signature = \"jwt_encode_sig\", signature_params = list(), scope = NULL, token_params = list() )"},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_bearer_jwt.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"OAuth with a bearer JWT (JSON web token) — req_oauth_bearer_jwt","text":"req httr2 request object. client oauth_client(). claim list claims. elements claim set static apart iat, nbf, exp, jti, provide list jwt_claim() automatically fill dynamic components. components need vary, can instead provide zero-argument callback function call jwt_claim(). signature Function use sign claim, e.g. jwt_encode_sig(). signature_params Additional arguments passed signature, e.g. size, header. scope Scopes requested resource owner. token_params List containing additional parameters passed token_url.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_bearer_jwt.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"OAuth with a bearer JWT (JSON web token) — req_oauth_bearer_jwt","text":"req_oauth_bearer_jwt() returns modified HTTP request use OAuth; oauth_flow_bearer_jwt() returns oauth_token.","code":""},{"path":[]},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_bearer_jwt.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"OAuth with a bearer JWT (JSON web token) — req_oauth_bearer_jwt","text":"","code":"req_auth <- function(req) { req_oauth_bearer_jwt( req, client = oauth_client(\"example\", \"https://example.com/get_token\"), claim = jwt_claim() ) } request(\"https://example.com\") |> req_auth() #> #> GET https://example.com #> Body: empty #> Policies: #> • auth_oauth: a list"},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_client_credentials.html","id":null,"dir":"Reference","previous_headings":"","what":"OAuth with client credentials — req_oauth_client_credentials","title":"OAuth with client credentials — req_oauth_client_credentials","text":"Authenticate using OAuth client credentials flow, defined Section 4.4 RFC 6749. used allow client access resources controls directly, behalf user. Learn overall OAuth authentication flow https://httr2.r-lib.org/articles/oauth.html.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_client_credentials.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"OAuth with client credentials — req_oauth_client_credentials","text":"","code":"req_oauth_client_credentials(req, client, scope = NULL, token_params = list()) oauth_flow_client_credentials(client, scope = NULL, token_params = list())"},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_client_credentials.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"OAuth with client credentials — req_oauth_client_credentials","text":"req httr2 request object. client oauth_client(). scope Scopes requested resource owner. token_params List containing additional parameters passed token_url.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_client_credentials.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"OAuth with client credentials — req_oauth_client_credentials","text":"req_oauth_client_credentials() returns modified HTTP request use OAuth; oauth_flow_client_credentials() returns oauth_token.","code":""},{"path":[]},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_client_credentials.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"OAuth with client credentials — req_oauth_client_credentials","text":"","code":"req_auth <- function(req) { req_oauth_client_credentials( req, client = oauth_client(\"example\", \"https://example.com/get_token\") ) } request(\"https://example.com\") |> req_auth() #> #> GET https://example.com #> Body: empty #> Policies: #> • auth_oauth: a list"},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_device.html","id":null,"dir":"Reference","previous_headings":"","what":"OAuth with device flow — req_oauth_device","title":"OAuth with device flow — req_oauth_device","text":"Authenticate using OAuth device flow, defined RFC 8628. designed devices access web browser (ever authenticated app TV, probably flow used), also works well within R. Learn overall OAuth authentication flow https://httr2.r-lib.org/articles/oauth.html.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_device.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"OAuth with device flow — req_oauth_device","text":"","code":"req_oauth_device( req, client, auth_url, scope = NULL, auth_params = list(), token_params = list(), cache_disk = FALSE, cache_key = NULL ) oauth_flow_device( client, auth_url, pkce = FALSE, scope = NULL, auth_params = list(), token_params = list() )"},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_device.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"OAuth with device flow — req_oauth_device","text":"req httr2 request object. client oauth_client(). auth_url Authorization url; need discover reading documentation. scope Scopes requested resource owner. auth_params list containing additional parameters passed oauth_flow_auth_code_url(). token_params List containing additional parameters passed token_url. cache_disk access token cached disk? reduces number times need re-authenticate cost storing access credentials disk. Learn https://httr2.r-lib.org/articles/oauth.html. cache_key want cache multiple tokens per app, use key disambiguate . pkce Use \"Proof Key Code Exchange\"? adds extra layer security always used supported server.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_device.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"OAuth with device flow — req_oauth_device","text":"req_oauth_device() returns modified HTTP request use OAuth; oauth_flow_device() returns oauth_token.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_device.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"OAuth with device flow — req_oauth_device","text":"","code":"req_auth_github <- function(req) { req_oauth_device( req, client = example_github_client(), auth_url = \"https://github.com/login/device/code\" ) } request(\"https://api.github.com/user\") |> req_auth_github() #> #> GET https://api.github.com/user #> Body: empty #> Policies: #> • auth_oauth: a list"},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_password.html","id":null,"dir":"Reference","previous_headings":"","what":"OAuth with username and password — req_oauth_password","title":"OAuth with username and password — req_oauth_password","text":"function implements OAuth resource owner password flow, defined Section 4.3 RFC 6749. allows user supply password , exchanging access token can cached locally. Learn overall OAuth authentication flow https://httr2.r-lib.org/articles/oauth.html","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_password.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"OAuth with username and password — req_oauth_password","text":"","code":"req_oauth_password( req, client, username, password = NULL, scope = NULL, token_params = list(), cache_disk = FALSE, cache_key = username ) oauth_flow_password( client, username, password = NULL, scope = NULL, token_params = list() )"},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_password.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"OAuth with username and password — req_oauth_password","text":"req httr2 request object. client oauth_client(). username User name. password Password. avoid entering password directly calling function captured .Rhistory. Instead, leave unset default behaviour prompt interactively. scope Scopes requested resource owner. token_params List containing additional parameters passed token_url. cache_disk access token cached disk? reduces number times need re-authenticate cost storing access credentials disk. Learn https://httr2.r-lib.org/articles/oauth.html. cache_key want cache multiple tokens per app, use key disambiguate .","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_password.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"OAuth with username and password — req_oauth_password","text":"req_oauth_password() returns modified HTTP request use OAuth; oauth_flow_password() returns oauth_token.","code":""},{"path":[]},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_password.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"OAuth with username and password — req_oauth_password","text":"","code":"req_auth <- function(req) { req_oauth_password(req, client = oauth_client(\"example\", \"https://example.com/get_token\"), username = \"username\" ) } if (interactive()) { request(\"https://example.com\") |> req_auth() }"},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_refresh.html","id":null,"dir":"Reference","previous_headings":"","what":"OAuth with a refresh token — req_oauth_refresh","title":"OAuth with a refresh token — req_oauth_refresh","text":"Authenticate using refresh token, following process described Section 6 RFC 6749. technique primarily useful testing: can manually retrieve OAuth token using another OAuth flow (e.g. oauth_flow_auth_code()), extract refresh token result, save environment variable use automated tests. requesting access token, server may also return new refresh token. happens, oauth_flow_refresh() warn, retrieve new update refresh token update stored value. find happening lot, sign using different flow automated tests. Learn overall OAuth authentication flow https://httr2.r-lib.org/articles/oauth.html.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_refresh.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"OAuth with a refresh token — req_oauth_refresh","text":"","code":"req_oauth_refresh( req, client, refresh_token = Sys.getenv(\"HTTR2_REFRESH_TOKEN\"), scope = NULL, token_params = list() ) oauth_flow_refresh( client, refresh_token = Sys.getenv(\"HTTR2_REFRESH_TOKEN\"), scope = NULL, token_params = list() )"},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_refresh.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"OAuth with a refresh token — req_oauth_refresh","text":"req httr2 request object. client oauth_client(). refresh_token refresh token. equivalent password typed console stored script. Instead, recommend placing environment variable; default behaviour look HTTR2_REFRESH_TOKEN. scope Scopes requested resource owner. token_params List containing additional parameters passed token_url.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_refresh.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"OAuth with a refresh token — req_oauth_refresh","text":"req_oauth_refresh() returns modified HTTP request use OAuth; oauth_flow_refresh() returns oauth_token.","code":""},{"path":[]},{"path":"https://httr2.r-lib.org/dev/reference/req_oauth_refresh.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"OAuth with a refresh token — req_oauth_refresh","text":"","code":"client <- oauth_client(\"example\", \"https://example.com/get_token\") req <- request(\"https://example.com\") req |> req_oauth_refresh(client) #> #> GET https://example.com #> Body: empty #> Policies: #> • auth_oauth: a list"},{"path":"https://httr2.r-lib.org/dev/reference/req_options.html","id":null,"dir":"Reference","previous_headings":"","what":"Set arbitrary curl options in request — req_options","title":"Set arbitrary curl options in request — req_options","text":"req_options() expert use ; allows directly set libcurl options access features otherwise available httr2.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_options.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set arbitrary curl options in request — req_options","text":"","code":"req_options(.req, ...)"},{"path":"https://httr2.r-lib.org/dev/reference/req_options.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set arbitrary curl options in request — req_options","text":".req request. ... Name-value pairs. name valid curl option, found curl::curl_options().","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_options.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set arbitrary curl options in request — req_options","text":"modified HTTP request.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_options.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Set arbitrary curl options in request — req_options","text":"","code":"# req_options() allows you to access curl options that are not otherwise # exposed by httr2. For example, in very special cases you may need to # turn off SSL verification. This is generally a bad idea so httr2 doesn't # provide a convenient wrapper, but if you really know what you're doing # you can still access this libcurl option: req <- request(\"https://example.com\") |> req_options(ssl_verifypeer = 0)"},{"path":"https://httr2.r-lib.org/dev/reference/req_perform.html","id":null,"dir":"Reference","previous_headings":"","what":"Perform a request to get a response — req_perform","title":"Perform a request to get a response — req_perform","text":"preparing request, call req_perform() perform , fetching results back R response. default HTTP method GET unless body (set req_body_json friends) present, case POST. can override defaults req_method().","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_perform.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Perform a request to get a response — req_perform","text":"","code":"req_perform( req, path = NULL, verbosity = NULL, mock = getOption(\"httr2_mock\", NULL), error_call = current_env() )"},{"path":"https://httr2.r-lib.org/dev/reference/req_perform.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Perform a request to get a response — req_perform","text":"req httr2 request object. path Optionally, path save body response. useful large responses since avoids storing response memory. verbosity much information print? wrapper around req_verbose() uses integer control verbosity: 0: output 1: show headers 2: show headers bodies 3: show headers, bodies, curl status messages. Use with_verbosity() control verbosity requests affect directly. mock mocking function. supplied, function called request. return either NULL (want handle request) response (). See with_mock()/ local_mock() details. error_call execution environment currently running function, e.g. caller_env(). function mentioned error messages source error. See call argument abort() information.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_perform.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Perform a request to get a response — req_perform","text":"HTTP request succeeds, status code ok (e.g. 200), HTTP response. HTTP request succeeds, status code error (e.g 404), error class c(\"httr2_http_404\", \"httr2_http\"). default, 400 500 status codes treated error, can customise req_error(). HTTP request fails (e.g. connection dropped server exist), error class \"httr2_failure\".","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_perform.html","id":"requests","dir":"Reference","previous_headings":"","what":"Requests","title":"Perform a request to get a response — req_perform","text":"Note one call req_perform() may perform multiple HTTP requests: url redirected 301, 302, 303, 307, curl automatically follow Location header new location. configured retries req_retry() request fails transient problem, req_perform() try waiting bit. See req_retry() details. using OAuth, cached token expired, req_perform() get new token either using refresh token (available) running OAuth flow.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_perform.html","id":"progress-bar","dir":"Reference","previous_headings":"","what":"Progress bar","title":"Perform a request to get a response — req_perform","text":"req_perform() automatically add progress bar needs wait requests req_throttle() req_retry(). can turn progress bar (just show total time wait) setting options(httr2_progress = FALSE).","code":""},{"path":[]},{"path":"https://httr2.r-lib.org/dev/reference/req_perform.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Perform a request to get a response — req_perform","text":"","code":"request(\"https://google.com\") |> req_perform() #> #> GET https://www.google.com/ #> Status: 200 OK #> Content-Type: text/html #> Body: In memory (20492 bytes)"},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_connection.html","id":null,"dir":"Reference","previous_headings":"","what":"Perform a request and return a streaming connection — req_perform_connection","title":"Perform a request and return a streaming connection — req_perform_connection","text":"Use req_perform_connection() perform request want stream response body. response returned req_perform_connection() includes connection body. can use resp_stream_raw(), resp_stream_lines(), resp_stream_sse() retrieve data chunk time. Always finish closing connection calling close(response). alternative interface req_perform_stream() returns connection can use pull data, rather providing callbacks data pushed . useful want work handling inputs stream.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_connection.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Perform a request and return a streaming connection — req_perform_connection","text":"","code":"req_perform_connection(req, blocking = TRUE)"},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_connection.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Perform a request and return a streaming connection — req_perform_connection","text":"req httr2 request object. blocking retrieving data, connection block wait desired information immediately return (possibly nothing)?","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_connection.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Perform a request and return a streaming connection — req_perform_connection","text":"","code":"req <- request(example_url()) |> req_url_path(\"/stream-bytes/32768\") resp <- req_perform_connection(req) length(resp_stream_raw(resp, kb = 16)) #> [1] 16384 length(resp_stream_raw(resp, kb = 16)) #> [1] 16384 # When the stream has no more data, you'll get an empty result: length(resp_stream_raw(resp, kb = 16)) #> [1] 0 # Always close the response when you're done close(resp)"},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_iterative.html","id":null,"dir":"Reference","previous_headings":"","what":"Perform requests iteratively, generating new requests from previous responses — req_perform_iterative","title":"Perform requests iteratively, generating new requests from previous responses — req_perform_iterative","text":"req_perform_iterative() iteratively generates performs requests, using callback function, next_req, define next request based current request response. probably want pair iteration helper use multi-response handler process result.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_iterative.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Perform requests iteratively, generating new requests from previous responses — req_perform_iterative","text":"","code":"req_perform_iterative( req, next_req, path = NULL, max_reqs = 20, on_error = c(\"stop\", \"return\"), progress = TRUE )"},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_iterative.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Perform requests iteratively, generating new requests from previous responses — req_perform_iterative","text":"req first request perform. next_req function takes previous response (resp) request (req) returns request next page NULL iteration terminate. See details. path Optionally, path save body request. glue string uses {} distinguish different requests. Useful large responses avoids storing response memory. max_reqs maximum number requests perform. Use Inf perform requests next_req() returns NULL. on_error happen request fails? \"stop\", default: stop iterating error. \"return\": stop iterating, returning successful responses far, well error object failed request. progress Display progress bar? Use TRUE turn basic progress bar, use string give name, see progress_bars customise ways.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_iterative.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Perform requests iteratively, generating new requests from previous responses — req_perform_iterative","text":"list, length max_reqs, containing responses possibly one error object, on_error \"return\" one requests errors. present, error object always last element list. httr2 errors captured; see req_error() details.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_iterative.html","id":"next-req-","dir":"Reference","previous_headings":"","what":"next_req()","title":"Perform requests iteratively, generating new requests from previous responses — req_perform_iterative","text":"key piece makes req_perform_iterative() work next_req() argument. common cases, can use one canned helpers, like iterate_with_offset(). , however, API wrapping uses different pagination system, need write . section gives advice. Generally, function needs inspect response, extract data , use modify previous request. example, imagine response returns cursor, needs added body request. simplest version function might look like : one problem : pages return, cursor NULL, req_body_json_modify() still generate meaningful request. need handle specifically returning NULL: value NULL lets req_perform_iterative() know pages remaining. one last feature might want add iterator: know total number pages, nice let req_perform_iterative() know can adjust progress bar. (ever decrease number pages, increase .) can signal total number pages calling signal_total_pages(), like :","code":"next_req <- function(resp, req) { cursor <- resp_body_json(resp)$next_cursor req |> req_body_json_modify(cursor = cursor) } next_req <- function(resp, req) { cursor <- resp_body_json(resp)$next_cursor if (is.null(cursor)) return(NULL) req |> req_body_json_modify(cursor = cursor) } next_req <- function(resp, req) { body <- resp_body_json(resp) cursor <- body$next_cursor if (is.null(cursor)) return(NULL) signal_total_pages(body$pages) req |> req_body_json_modify(cursor = cursor) }"},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_iterative.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Perform requests iteratively, generating new requests from previous responses — req_perform_iterative","text":"","code":"req <- request(example_url()) |> req_url_path(\"/iris\") |> req_throttle(10) |> req_url_query(limit = 5) resps <- req_perform_iterative(req, iterate_with_offset(\"page_index\")) data <- resps |> resps_data(function(resp) { data <- resp_body_json(resp)$data data.frame( Sepal.Length = sapply(data, `[[`, \"Sepal.Length\"), Sepal.Width = sapply(data, `[[`, \"Sepal.Width\"), Petal.Length = sapply(data, `[[`, \"Petal.Length\"), Petal.Width = sapply(data, `[[`, \"Petal.Width\"), Species = sapply(data, `[[`, \"Species\") ) }) str(data) #> 'data.frame':\t100 obs. of 5 variables: #> $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ... #> $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ... #> $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ... #> $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ... #> $ Species : chr \"setosa\" \"setosa\" \"setosa\" \"setosa\" ..."},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_parallel.html","id":null,"dir":"Reference","previous_headings":"","what":"Perform a list of requests in parallel — req_perform_parallel","title":"Perform a list of requests in parallel — req_perform_parallel","text":"variation req_perform_sequential() performs multiple requests parallel. Exercise caution using function; easy pummel server many simultaneous requests. use hosts designed serve many files , typically web servers, API servers. req_perform_parallel() limitations: retrieve new OAuth token expires part way requests. perform throttling req_throttle(). attempt retries described req_retry(). consults cache set req_cache() /requests. limitations problematic use case, recommend req_perform_sequential() instead.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_parallel.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Perform a list of requests in parallel — req_perform_parallel","text":"","code":"req_perform_parallel( reqs, paths = NULL, pool = NULL, on_error = c(\"stop\", \"return\", \"continue\"), progress = TRUE )"},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_parallel.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Perform a list of requests in parallel — req_perform_parallel","text":"reqs list requests. paths optional character vector paths, want download request bodies disk. supplied, must length reqs. pool Optionally, curl pool made curl::new_pool(). Supply want override defaults total concurrent connections (100) concurrent connections per host (6). on_error happen one requests fails? stop, default: stop iterating error. return: stop iterating, returning successful responses received far, well error object failed request. continue: continue iterating, recording errors result. progress Display progress bar? Use TRUE turn basic progress bar, use string give name, see progress_bars customise ways.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_parallel.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Perform a list of requests in parallel — req_perform_parallel","text":"list, length reqs, containing responses possibly error objects, on_error \"return\" \"continue\" one responses errors. on_error \"return\" errors ith request, ith element result error object, remaining elements NULL. on_error \"continue\", mix requests error objects. httr2 errors captured; see req_error() details.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_parallel.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Perform a list of requests in parallel — req_perform_parallel","text":"","code":"# Requesting these 4 pages one at a time would take 2 seconds: request_base <- request(example_url()) reqs <- list( request_base |> req_url_path(\"/delay/0.5\"), request_base |> req_url_path(\"/delay/0.5\"), request_base |> req_url_path(\"/delay/0.5\"), request_base |> req_url_path(\"/delay/0.5\") ) # But it's much faster if you request in parallel system.time(resps <- req_perform_parallel(reqs)) #> user system elapsed #> 0.383 0.648 1.032 # req_perform_parallel() will fail on error reqs <- list( request_base |> req_url_path(\"/status/200\"), request_base |> req_url_path(\"/status/400\"), request(\"FAILURE\") ) try(resps <- req_perform_parallel(reqs)) #> Error in req_perform_parallel(reqs) : Could not resolve host: FAILURE # but can use on_error to capture all successful results resps <- req_perform_parallel(reqs, on_error = \"continue\") # Inspect the successful responses resps |> resps_successes() #> [[1]] #> #> GET http://127.0.0.1:45107/status/200 #> Status: 200 OK #> Content-Type: text/plain #> Body: None #> # And the failed responses resps |> resps_failures() |> resps_requests() #> [[1]] #> #> GET http://127.0.0.1:45107/status/400 #> Body: empty #> #> [[2]] #> #> GET FAILURE #> Body: empty #>"},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_promise.html","id":null,"dir":"Reference","previous_headings":"","what":"Perform request asynchronously using the promises package — req_perform_promise","title":"Perform request asynchronously using the promises package — req_perform_promise","text":"variation req_perform() returns promises::promise() object immediately performs request background, returning program control request finished. See promises package documentation details work resulting promise object. Like req_perform_parallel(), exercise caution using function; easy pummel server many simultaneous requests. Also, servers can handle 1 request time, responses may still return sequentially. req_perform_promise() also similar limitations req_perform_parallel() function, : retrieve new OAuth token expires promised request created actually requested. perform throttling req_throttle(). attempt retries described req_retry(). consults cache set req_cache() request promised.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_promise.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Perform request asynchronously using the promises package — req_perform_promise","text":"","code":"req_perform_promise(req, path = NULL, pool = NULL)"},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_promise.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Perform request asynchronously using the promises package — req_perform_promise","text":"req httr2 request object. path Optionally, path save body response. useful large responses since avoids storing response memory. pool Optionally, curl pool made curl::new_pool(). Supply want override defaults total concurrent connections (100) concurrent connections per host (6).","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_promise.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Perform request asynchronously using the promises package — req_perform_promise","text":"promises::promise() object resolves response successful rejects errors thrown req_perform().","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_promise.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Perform request asynchronously using the promises package — req_perform_promise","text":"","code":"if (FALSE) { # \\dontrun{ library(promises) request_base <- request(example_url()) |> req_url_path_append(\"delay\") p <- request_base |> req_url_path_append(2) |> req_perform_promise() # A promise object, not particularly useful on its own p # Use promise chaining functions to access results p %...>% resp_body_json() %...>% print() # Can run two requests at the same time p1 <- request_base |> req_url_path_append(2) |> req_perform_promise() p2 <- request_base |> req_url_path_append(1) |> req_perform_promise() p1 %...>% resp_url_path %...>% paste0(., \" finished\") %...>% print() p2 %...>% resp_url_path %...>% paste0(., \" finished\") %...>% print() # See the [promises package documentation](https://rstudio.github.io/promises/) # for more information on working with promises } # }"},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_sequential.html","id":null,"dir":"Reference","previous_headings":"","what":"Perform multiple requests in sequence — req_perform_sequential","title":"Perform multiple requests in sequence — req_perform_sequential","text":"Given list requests, function performs turn, returning list responses. slower req_perform_parallel() fewer limitations.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_sequential.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Perform multiple requests in sequence — req_perform_sequential","text":"","code":"req_perform_sequential( reqs, paths = NULL, on_error = c(\"stop\", \"return\", \"continue\"), progress = TRUE )"},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_sequential.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Perform multiple requests in sequence — req_perform_sequential","text":"reqs list requests. paths optional character vector paths, want download request bodies disk. supplied, must length reqs. on_error happen one requests fails? stop, default: stop iterating error. return: stop iterating, returning successful responses received far, well error object failed request. continue: continue iterating, recording errors result. progress Display progress bar? Use TRUE turn basic progress bar, use string give name, see progress_bars customise ways.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_sequential.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Perform multiple requests in sequence — req_perform_sequential","text":"list, length reqs, containing responses possibly error objects, on_error \"return\" \"continue\" one responses errors. on_error \"return\" errors ith request, ith element result error object, remaining elements NULL. on_error \"continue\", mix requests error objects. httr2 errors captured; see req_error() details.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_sequential.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Perform multiple requests in sequence — req_perform_sequential","text":"","code":"# One use of req_perform_sequential() is if the API allows you to request # data for multiple objects, you want data for more objects than can fit # in one request. req <- request(\"https://api.restful-api.dev/objects\") # Imagine we have 50 ids: ids <- sort(sample(100, 50)) # But the API only allows us to request 10 at time. So we first use split # and some modulo arithmetic magic to generate chunks of length 10 chunks <- unname(split(ids, (seq_along(ids) - 1) %/% 10)) # Then we use lapply to generate one request for each chunk: reqs <- chunks |> lapply(\\(idx) req |> req_url_query(id = idx, .multi = \"comma\")) # Then we can perform them all and get the results if (FALSE) { # \\dontrun{ resps <- reqs |> req_perform_sequential() resps_data(resps, \\(resp) resp_body_json(resp)) } # }"},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_stream.html","id":null,"dir":"Reference","previous_headings":"","what":"Perform a request and handle data as it streams back — req_perform_stream","title":"Perform a request and handle data as it streams back — req_perform_stream","text":"preparing request, call req_perform_stream() perform request handle result streaming callback. useful streaming HTTP APIs potentially stream never ends. callback called result successful. need stream error response, can use req_error() suppress error handling body streamed .","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_stream.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Perform a request and handle data as it streams back — req_perform_stream","text":"","code":"req_perform_stream( req, callback, timeout_sec = Inf, buffer_kb = 64, round = c(\"byte\", \"line\") )"},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_stream.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Perform a request and handle data as it streams back — req_perform_stream","text":"req httr2 request object. callback single argument callback function. called repeatedly raw vector whenever least buffer_kb worth data process. must return TRUE continue streaming. timeout_sec Number seconds process stream . buffer_kb Buffer size, kilobytes. round raw vector sent callback rounded? Choose \"byte\", \"line\", supply function takes raw vector bytes returns locations possible cut points (integer() none).","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_stream.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Perform a request and handle data as it streams back — req_perform_stream","text":"HTTP response. body empty request successful (since callback function handled ). body contain HTTP response body request unsuccessful.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_perform_stream.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Perform a request and handle data as it streams back — req_perform_stream","text":"","code":"show_bytes <- function(x) { cat(\"Got \", length(x), \" bytes\\n\", sep = \"\") TRUE } resp <- request(example_url()) |> req_url_path(\"/stream-bytes/100000\") |> req_perform_stream(show_bytes, buffer_kb = 32) #> Got 32768 bytes #> Got 32768 bytes #> Got 32768 bytes #> Got 1696 bytes resp #> #> GET http://127.0.0.1:45107/stream-bytes/100000 #> Status: 200 OK #> Content-Type: application/octet-stream #> Body: None"},{"path":"https://httr2.r-lib.org/dev/reference/req_progress.html","id":null,"dir":"Reference","previous_headings":"","what":"Add a progress bar to long downloads or uploads — req_progress","title":"Add a progress bar to long downloads or uploads — req_progress","text":"uploading downloading large file, often useful provide progress bar know long wait.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_progress.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Add a progress bar to long downloads or uploads — req_progress","text":"","code":"req_progress(req, type = c(\"down\", \"up\"))"},{"path":"https://httr2.r-lib.org/dev/reference/req_progress.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Add a progress bar to long downloads or uploads — req_progress","text":"req request. type Type progress display: either number bytes uploaded downloaded.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_progress.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Add a progress bar to long downloads or uploads — req_progress","text":"","code":"req <- request(\"https://r4ds.s3.us-west-2.amazonaws.com/seattle-library-checkouts.csv\") |> req_progress() if (FALSE) { # \\dontrun{ path <- tempfile() req |> req_perform(path = path) } # }"},{"path":"https://httr2.r-lib.org/dev/reference/req_proxy.html","id":null,"dir":"Reference","previous_headings":"","what":"Use a proxy for a request — req_proxy","title":"Use a proxy for a request — req_proxy","text":"Use proxy request","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_proxy.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Use a proxy for a request — req_proxy","text":"","code":"req_proxy( req, url, port = NULL, username = NULL, password = NULL, auth = \"basic\" )"},{"path":"https://httr2.r-lib.org/dev/reference/req_proxy.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Use a proxy for a request — req_proxy","text":"req httr2 request object. url, port Location proxy. username, password Login details proxy, needed. auth Type HTTP authentication use. one following: basic, digest, digest_ie, gssnegotiate, ntlm, .","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_proxy.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Use a proxy for a request — req_proxy","text":"","code":"# Proxy from https://www.proxynova.com/proxy-server-list/ if (FALSE) { # \\dontrun{ request(\"http://hadley.nz\") |> req_proxy(\"20.116.130.70\", 3128) |> req_perform() } # }"},{"path":"https://httr2.r-lib.org/dev/reference/req_retry.html","id":null,"dir":"Reference","previous_headings":"","what":"Control when a request will retry, and how long it will wait between tries — req_retry","title":"Control when a request will retry, and how long it will wait between tries — req_retry","text":"req_retry() alters req_perform() automatically retry case failure. activate , must specify either total number requests make max_tries total amount time spend max_seconds. req_perform() retry : Either HTTP request HTTP response complete successfully leading error curl, lower-level library httr2 uses perform HTTP request. occurs, example, wifi . error \"transient\", .e. HTTP error can resolved waiting. default, 429 503 statuses treated transient, API wrapping transient status codes (conveys transient-ness property response), can override default is_transient. bad idea immediately retry request, req_perform() wait little trying : response contains Retry-header, httr2 wait amount time specifies. API wrapping conveys information different header (property response) can override default behaviour retry_after. Otherwise, httr2 use \"truncated exponential backoff full jitter\", .e. wait random amount time one second 2 ^ tries seconds, capped 60 seconds. words, waits runif(1, 1, 2) seconds first failure, runif(1, 1, 4) second, runif(1, 1, 8) third, . prefer different strategy, can override default backoff.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_retry.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Control when a request will retry, and how long it will wait between tries — req_retry","text":"","code":"req_retry( req, max_tries = NULL, max_seconds = NULL, is_transient = NULL, backoff = NULL, after = NULL )"},{"path":"https://httr2.r-lib.org/dev/reference/req_retry.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Control when a request will retry, and how long it will wait between tries — req_retry","text":"req httr2 request object. max_tries, max_seconds Cap maximum number attempts max_tries total elapsed time first request max_seconds. neither option supplied (default), req_perform() retry. max_tries total number attempts make, always greater one.` is_transient predicate function takes single argument (response) returns TRUE FALSE specifying whether response represents transient error. backoff function takes single argument (number failed attempts far) returns number seconds wait. function takes single argument (response) returns either number seconds wait NULL, indicates precise wait time available backoff strategy used instead..","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_retry.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Control when a request will retry, and how long it will wait between tries — req_retry","text":"modified HTTP request.","code":""},{"path":[]},{"path":"https://httr2.r-lib.org/dev/reference/req_retry.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Control when a request will retry, and how long it will wait between tries — req_retry","text":"","code":"# google APIs assume that a 500 is also a transient error request(\"http://google.com\") |> req_retry(is_transient = \\(resp) resp_status(resp) %in% c(429, 500, 503)) #> #> GET http://google.com #> Body: empty #> Policies: #> • retry_is_transient: a function # use a constant 10s delay after every failure request(\"http://example.com\") |> req_retry(backoff = ~10) #> #> GET http://example.com #> Body: empty #> Policies: #> • retry_backoff: a object # When rate-limited, GitHub's API returns a 403 with # `X-RateLimit-Remaining: 0` and an Unix time stored in the # `X-RateLimit-Reset` header. This takes a bit more work to handle: github_is_transient <- function(resp) { resp_status(resp) == 403 && identical(resp_header(resp, \"X-RateLimit-Remaining\"), \"0\") } github_after <- function(resp) { time <- as.numeric(resp_header(resp, \"X-RateLimit-Reset\")) time - unclass(Sys.time()) } request(\"http://api.github.com\") |> req_retry( is_transient = github_is_transient, after = github_after ) #> #> GET http://api.github.com #> Body: empty #> Policies: #> • retry_is_transient: a function #> • retry_after: a function"},{"path":"https://httr2.r-lib.org/dev/reference/req_template.html","id":null,"dir":"Reference","previous_headings":"","what":"Set request method/path from a template — req_template","title":"Set request method/path from a template — req_template","text":"Many APIs document methods lightweight template mechanism looks like GET /user/{user} POST /organisation/:org. function makes easy copy paste snippets retrieve template variables either function arguments current environment. req_template() append existing path can set base url initial request(). means generally want avoid multiple req_template() calls request.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_template.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set request method/path from a template — req_template","text":"","code":"req_template(req, template, ..., .env = parent.frame())"},{"path":"https://httr2.r-lib.org/dev/reference/req_template.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set request method/path from a template — req_template","text":"req httr2 request object. template template string consists optional HTTP method path containing variables labelled like either :foo {foo}. ... Template variables. .env Environment look template variables found .... Expert use .","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_template.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set request method/path from a template — req_template","text":"modified HTTP request.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_template.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Set request method/path from a template — req_template","text":"","code":"httpbin <- request(example_url()) # You can supply template parameters in `...` httpbin |> req_template(\"GET /bytes/{n}\", n = 100) #> #> GET http://127.0.0.1:45107/bytes/100 #> Body: empty # or you retrieve from the current environment n <- 200 httpbin |> req_template(\"GET /bytes/{n}\") #> #> GET http://127.0.0.1:45107/bytes/200 #> Body: empty # Existing path is preserved: httpbin_test <- request(example_url()) |> req_url_path(\"/test\") name <- \"id\" value <- \"a3fWa\" httpbin_test |> req_template(\"GET /set/{name}/{value}\") #> #> GET http://127.0.0.1:45107/test/set/id/a3fWa #> Body: empty"},{"path":"https://httr2.r-lib.org/dev/reference/req_throttle.html","id":null,"dir":"Reference","previous_headings":"","what":"Rate limit a request by automatically adding a delay — req_throttle","title":"Rate limit a request by automatically adding a delay — req_throttle","text":"Use req_throttle() ensure repeated calls req_perform() never exceed specified rate.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_throttle.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Rate limit a request by automatically adding a delay — req_throttle","text":"","code":"req_throttle(req, rate, realm = NULL)"},{"path":"https://httr2.r-lib.org/dev/reference/req_throttle.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Rate limit a request by automatically adding a delay — req_throttle","text":"req httr2 request object. rate Maximum rate, .e. maximum number requests per second. Usually easiest expressed fraction, number_of_requests / number_of_seconds, e.g. 15 requests per minute 15 / 60. realm string uniquely identifies throttle pool use (throttling limits always apply per pool). supplied, defaults hostname request.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_throttle.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Rate limit a request by automatically adding a delay — req_throttle","text":"modified HTTP request.","code":""},{"path":[]},{"path":"https://httr2.r-lib.org/dev/reference/req_throttle.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Rate limit a request by automatically adding a delay — req_throttle","text":"","code":"# Ensure we never send more than 30 requests a minute req <- request(example_url()) |> req_throttle(rate = 30 / 60) resp <- req_perform(req) throttle_status() #> realm last_request #> 1 127.0.0.1 2024-09-09 13:21:39 resp <- req_perform(req) #> Waiting 2s for throttling delay ■■■■■■■■■■■■■■■ #> Waiting 2s for throttling delay ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ throttle_status() #> realm last_request #> 1 127.0.0.1 2024-09-09 13:21:41"},{"path":"https://httr2.r-lib.org/dev/reference/req_timeout.html","id":null,"dir":"Reference","previous_headings":"","what":"Set time limit for a request — req_timeout","title":"Set time limit for a request — req_timeout","text":"error thrown request complete time limit.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_timeout.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set time limit for a request — req_timeout","text":"","code":"req_timeout(req, seconds)"},{"path":"https://httr2.r-lib.org/dev/reference/req_timeout.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set time limit for a request — req_timeout","text":"req httr2 request object. seconds Maximum number seconds wait","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_timeout.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set time limit for a request — req_timeout","text":"modified HTTP request.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_timeout.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Set time limit for a request — req_timeout","text":"","code":"# Give up after at most 10 seconds request(\"http://example.com\") |> req_timeout(10) #> #> GET http://example.com #> Body: empty #> Options: #> • timeout_ms: 10000 #> • connecttimeout: 0"},{"path":"https://httr2.r-lib.org/dev/reference/req_url.html","id":null,"dir":"Reference","previous_headings":"","what":"Modify request URL — req_url","title":"Modify request URL — req_url","text":"req_url() replaces entire url req_url_query() modifies components query req_url_path() modifies path req_url_path_append() adds path","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_url.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Modify request URL — req_url","text":"","code":"req_url(req, url) req_url_query(.req, ..., .multi = c(\"error\", \"comma\", \"pipe\", \"explode\")) req_url_path(req, ...) req_url_path_append(req, ...)"},{"path":"https://httr2.r-lib.org/dev/reference/req_url.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Modify request URL — req_url","text":"req, .req httr2 request object. url New URL; completely replaces existing. ... req_url_query(): Name-value pairs define query parameters. value must either atomic vector NULL (removes corresponding parameters). want opt escaping, wrap strings (). req_url_path() req_url_path_append(): sequence path components combined /. .multi Controls happens element ... vector containing multiple values: \"error\", default, throws error. \"comma\", separates values ,, e.g. ?x=1,2. \"pipe\", separates values |, e.g. ?x=1|2. \"explode\", turns element parameter, e.g. ?x=1&x=2. none functions work, can alternatively supply function takes character vector returns string.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_url.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Modify request URL — req_url","text":"modified HTTP request.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_url.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Modify request URL — req_url","text":"","code":"req <- request(\"http://example.com\") # Change url components req |> req_url_path_append(\"a\") |> req_url_path_append(\"b\") |> req_url_path_append(\"search.html\") |> req_url_query(q = \"the cool ice\") #> #> GET http://example.com/a/b/search.html?q=the%20cool%20ice #> Body: empty # Change complete url req |> req_url(\"http://google.com\") #> #> GET http://google.com #> Body: empty # Use .multi to control what happens with vector parameters: req |> req_url_query(id = 100:105, .multi = \"comma\") #> #> GET http://example.com?id=100,101,102,103,104,105 #> Body: empty req |> req_url_query(id = 100:105, .multi = \"explode\") #> #> GET http://example.com?id=100&id=101&id=102&id=103&id=104&id=105 #> Body: empty # If you have query parameters in a list, use !!! params <- list(a = \"1\", b = \"2\") req |> req_url_query(!!!params, c = \"3\") #> #> GET http://example.com?a=1&b=2&c=3 #> Body: empty"},{"path":"https://httr2.r-lib.org/dev/reference/req_user_agent.html","id":null,"dir":"Reference","previous_headings":"","what":"Set user-agent for a request — req_user_agent","title":"Set user-agent for a request — req_user_agent","text":"overrides default user-agent set httr2 includes version numbers httr2, curl package, libcurl.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_user_agent.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set user-agent for a request — req_user_agent","text":"","code":"req_user_agent(req, string = NULL)"},{"path":"https://httr2.r-lib.org/dev/reference/req_user_agent.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set user-agent for a request — req_user_agent","text":"req httr2 request object. string String sent User-Agent header. NULL, user default.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_user_agent.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set user-agent for a request — req_user_agent","text":"modified HTTP request.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_user_agent.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Set user-agent for a request — req_user_agent","text":"","code":"# Default user-agent: request(\"http://example.com\") |> req_dry_run() #> GET / HTTP/1.1 #> Host: example.com #> User-Agent: httr2/1.0.3.9000 r-curl/5.2.2 libcurl/7.81.0 #> Accept: */* #> Accept-Encoding: deflate, gzip, br, zstd #> request(\"http://example.com\") |> req_user_agent(\"MyString\") |> req_dry_run() #> GET / HTTP/1.1 #> Host: example.com #> User-Agent: MyString #> Accept: */* #> Accept-Encoding: deflate, gzip, br, zstd #> # If you're wrapping in an API in a package, it's polite to set the # user agent to identify your package. request(\"http://example.com\") |> req_user_agent(\"MyPackage (http://mypackage.com)\") |> req_dry_run() #> GET / HTTP/1.1 #> Host: example.com #> User-Agent: MyPackage (http://mypackage.com) #> Accept: */* #> Accept-Encoding: deflate, gzip, br, zstd #>"},{"path":"https://httr2.r-lib.org/dev/reference/req_verbose.html","id":null,"dir":"Reference","previous_headings":"","what":"Show extra output when request is performed — req_verbose","title":"Show extra output when request is performed — req_verbose","text":"req_verbose() uses following prefixes distinguish different components HTTP requests responses: * informative curl messages -> request headers >> request body <- response headers << response body","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_verbose.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Show extra output when request is performed — req_verbose","text":"","code":"req_verbose( req, header_req = TRUE, header_resp = TRUE, body_req = FALSE, body_resp = FALSE, info = FALSE, redact_headers = TRUE )"},{"path":"https://httr2.r-lib.org/dev/reference/req_verbose.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Show extra output when request is performed — req_verbose","text":"req httr2 request object. header_req, header_resp Show request/response headers? body_req, body_resp request/response bodies? response body compressed, show number bytes received \"chunk\". info Show informational text curl? mainly useful debugging https auth problems, disabled default. redact_headers Redact confidential data headers? Currently redacts contents Authorization header prevent accidentally leaking credentials debugging/reprexing.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/req_verbose.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Show extra output when request is performed — req_verbose","text":"modified HTTP request.","code":""},{"path":[]},{"path":"https://httr2.r-lib.org/dev/reference/req_verbose.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Show extra output when request is performed — req_verbose","text":"","code":"# Use `req_verbose()` to see the headers that are sent back and forth when # making a request resp <- request(\"https://httr2.r-lib.org\") |> req_verbose() |> req_perform() #> -> GET / HTTP/2 #> -> Host: httr2.r-lib.org #> -> user-agent: httr2/1.0.3.9000 r-curl/5.2.2 libcurl/7.81.0 #> -> accept: */* #> -> accept-encoding: deflate, gzip, br, zstd #> -> #> <- HTTP/2 200 #> <- server: GitHub.com #> <- content-type: text/html; charset=utf-8 #> <- last-modified: Sat, 07 Sep 2024 08:34:06 GMT #> <- access-control-allow-origin: * #> <- etag: W/\"66dc0ffe-4714\" #> <- expires: Mon, 09 Sep 2024 13:10:31 GMT #> <- cache-control: max-age=600 #> <- content-encoding: gzip #> <- x-proxy-cache: MISS #> <- x-github-request-id: 847F:156E31:4AA7ACF:52E50EE:66DEF16E #> <- accept-ranges: bytes #> <- date: Mon, 09 Sep 2024 13:21:42 GMT #> <- via: 1.1 varnish #> <- age: 81 #> <- x-served-by: cache-iad-kcgs7200151-IAD #> <- x-cache: HIT #> <- x-cache-hits: 2 #> <- x-timer: S1725888102.320489,VS0,VE0 #> <- vary: Accept-Encoding #> <- x-fastly-request-id: 91d391dadff9aee74bdb32f37c4a874973cdecdb #> <- content-length: 4546 #> <- # Or use one of the convenient shortcuts: resp <- request(\"https://httr2.r-lib.org\") |> req_perform(verbosity = 1) #> -> GET / HTTP/2 #> -> Host: httr2.r-lib.org #> -> user-agent: httr2/1.0.3.9000 r-curl/5.2.2 libcurl/7.81.0 #> -> accept: */* #> -> accept-encoding: deflate, gzip, br, zstd #> -> #> <- HTTP/2 200 #> <- server: GitHub.com #> <- content-type: text/html; charset=utf-8 #> <- last-modified: Sat, 07 Sep 2024 08:34:06 GMT #> <- access-control-allow-origin: * #> <- etag: W/\"66dc0ffe-4714\" #> <- expires: Mon, 09 Sep 2024 13:10:31 GMT #> <- cache-control: max-age=600 #> <- content-encoding: gzip #> <- x-proxy-cache: MISS #> <- x-github-request-id: 847F:156E31:4AA7ACF:52E50EE:66DEF16E #> <- accept-ranges: bytes #> <- date: Mon, 09 Sep 2024 13:21:42 GMT #> <- via: 1.1 varnish #> <- age: 81 #> <- x-served-by: cache-iad-kcgs7200151-IAD #> <- x-cache: HIT #> <- x-cache-hits: 3 #> <- x-timer: S1725888102.334550,VS0,VE0 #> <- vary: Accept-Encoding #> <- x-fastly-request-id: ad8492ef3ed0bde920ffed96aaab6d6d04135820 #> <- content-length: 4546 #> <-"},{"path":"https://httr2.r-lib.org/dev/reference/request.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a new HTTP request — request","title":"Create a new HTTP request — request","text":"three steps needed perform HTTP request httr2: Create request object request(url) (function). Define behaviour req_ functions, e.g.: req_headers() set header values. req_url_path() friends modify url. req_body_json() friends add body. req_auth_basic() perform basic HTTP authentication. req_oauth_auth_code() use OAuth auth code flow. Perform request fetch response req_perform().","code":""},{"path":"https://httr2.r-lib.org/dev/reference/request.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a new HTTP request — request","text":"","code":"request(base_url)"},{"path":"https://httr2.r-lib.org/dev/reference/request.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a new HTTP request — request","text":"base_url Base URL request.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/request.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a new HTTP request — request","text":"HTTP request: S3 list class httr2_request.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/request.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create a new HTTP request — request","text":"","code":"request(\"http://r-project.org\") #> #> GET http://r-project.org #> Body: empty"},{"path":"https://httr2.r-lib.org/dev/reference/resp_body_raw.html","id":null,"dir":"Reference","previous_headings":"","what":"Extract body from response — resp_body_raw","title":"Extract body from response — resp_body_raw","text":"resp_body_raw() returns raw bytes. resp_body_string() returns UTF-8 string. resp_body_json() returns parsed JSON. resp_body_html() returns parsed HTML. resp_body_xml() returns parsed XML. resp_has_body() returns TRUE response body. resp_body_json() resp_body_xml() check content-type header correct; server returns incorrect type can suppress check check_type = FALSE. two functions also cache parsed object second subsequent calls low-cost.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/resp_body_raw.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Extract body from response — resp_body_raw","text":"","code":"resp_body_raw(resp) resp_has_body(resp) resp_body_string(resp, encoding = NULL) resp_body_json(resp, check_type = TRUE, simplifyVector = FALSE, ...) resp_body_html(resp, check_type = TRUE, ...) resp_body_xml(resp, check_type = TRUE, ...)"},{"path":"https://httr2.r-lib.org/dev/reference/resp_body_raw.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Extract body from response — resp_body_raw","text":"resp httr2 response object, created req_perform(). encoding Character encoding body text. specified, use encoding specified content-type, falling back UTF-8 warning found. resulting string always re-encoded UTF-8. check_type Check response expected content type? Set FALSE suppress automated check simplifyVector JSON arrays containing primitives (.e. booleans, numbers, strings) caused atomic vectors? ... arguments passed jsonlite::fromJSON() xml2::read_xml() respectively.","code":""},{"path":"https://httr2.r-lib.org/dev/reference/resp_body_raw.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Extract body from response — resp_body_raw","text":"resp_body_raw() returns raw vector. resp_body_string() returns string. resp_body_json() returns NULL, atomic vector, list. resp_body_html() resp_body_xml() return xml2::xml_document","code":""},{"path":"https://httr2.r-lib.org/dev/reference/resp_body_raw.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Extract body from response — resp_body_raw","text":"","code":"resp <- request(\"https://httr2.r-lib.org\") |> req_perform() resp #> #> GET https://httr2.r-lib.org/ #> Status: 200 OK #> Content-Type: text/html #> Body: In memory (18196 bytes) resp |> resp_has_body() #> [1] TRUE resp |> resp_body_raw() #> [1] 3c 21 44 4f 43 54 59 50 45 20 68 74 6d 6c 3e 0a 3c 21 2d 2d 20 47 #> [23] 65 6e 65 72 61 74 65 64 20 62 79 20 70 6b 67 64 6f 77 6e 3a 20 64 #> [45] 6f 20 6e 6f 74 20 65 64 69 74 20 62 79 20 68 61 6e 64 20 2d 2d 3e #> [67] 3c 68 74 6d 6c 20 6c 61 6e 67 3d 22 65 6e 22 3e 0a 3c 68 65 61 64 #> [89] 3e 0a 3c 6d 65 74 61 20 68 74 74 70 2d 65 71 75 69 76 3d 22 43 6f #> [111] 6e 74 65 6e 74 2d 54 79 70 65 22 20 63 6f 6e 74 65 6e 74 3d 22 74 #> [133] 65 78 74 2f 68 74 6d 6c 3b 20 63 68 61 72 73 65 74 3d 55 54 46 2d #> [155] 38 22 3e 0a 3c 6d 65 74 61 20 63 68 61 72 73 65 74 3d 22 75 74 66 #> [177] 2d 38 22 3e 0a 3c 6d 65 74 61 20 68 74 74 70 2d 65 71 75 69 76 3d #> [199] 22 58 2d 55 41 2d 43 6f 6d 70 61 74 69 62 6c 65 22 20 63 6f 6e 74 #> [221] 65 6e 74 3d 22 49 45 3d 65 64 67 65 22 3e 0a 3c 6d 65 74 61 20 6e #> [243] 61 6d 65 3d 22 76 69 65 77 70 6f 72 74 22 20 63 6f 6e 74 65 6e 74 #> [265] 3d 22 77 69 64 74 68 3d 64 65 76 69 63 65 2d 77 69 64 74 68 2c 20 #> [287] 69 6e 69 74 69 61 6c 2d 73 63 61 6c 65 3d 31 2c 20 73 68 72 69 6e #> [309] 6b 2d 74 6f 2d 66 69 74 3d 6e 6f 22 3e 0a 3c 74 69 74 6c 65 3e 50 #> [331] 65 72 66 6f 72 6d 20 48 54 54 50 20 52 65 71 75 65 73 74 73 20 61 #> [353] 6e 64 20 50 72 6f 63 65 73 73 20 74 68 65 20 52 65 73 70 6f 6e 73 #> [375] 65 73 20 e2 80 a2 20 68 74 74 72 32 3c 2f 74 69 74 6c 65 3e 0a 3c #> [397] 21 2d 2d 20 66 61 76 69 63 6f 6e 73 20 2d 2d 3e 3c 6c 69 6e 6b 20 #> [419] 72 65 6c 3d 22 69 63 6f 6e 22 20 74 79 70 65 3d 22 69 6d 61 67 65 #> [441] 2f 70 6e 67 22 20 73 69 7a 65 73 3d 22 31 36 78 31 36 22 20 68 72 #> [463] 65 66 3d 22 66 61 76 69 63 6f 6e 2d 31 36 78 31 36 2e 70 6e 67 22 #> [485] 3e 0a 3c 6c 69 6e 6b 20 72 65 6c 3d 22 69 63 6f 6e 22 20 74 79 70 #> [507] 65 3d 22 69 6d 61 67 65 2f 70 6e 67 22 20 73 69 7a 65 73 3d 22 33 #> [529] 32 78 33 32 22 20 68 72 65 66 3d 22 66 61 76 69 63 6f 6e 2d 33 32 #> [551] 78 33 32 2e 70 6e 67 22 3e 0a 3c 6c 69 6e 6b 20 72 65 6c 3d 22 61 #> [573] 70 70 6c 65 2d 74 6f 75 63 68 2d 69 63 6f 6e 22 20 74 79 70 65 3d #> [595] 22 69 6d 61 67 65 2f 70 6e 67 22 20 73 69 7a 65 73 3d 22 31 38 30 #> [617] 78 31 38 30 22 20 68 72 65 66 3d 22 61 70 70 6c 65 2d 74 6f 75 63 #> [639] 68 2d 69 63 6f 6e 2e 70 6e 67 22 3e 0a 3c 6c 69 6e 6b 20 72 65 6c #> [661] 3d 22 61 70 70 6c 65 2d 74 6f 75 63 68 2d 69 63 6f 6e 22 20 74 79 #> [683] 70 65 3d 22 69 6d 61 67 65 2f 70 6e 67 22 20 73 69 7a 65 73 3d 22 #> [705] 31 32 30 78 31 32 30 22 20 68 72 65 66 3d 22 61 70 70 6c 65 2d 74 #> [727] 6f 75 63 68 2d 69 63 6f 6e 2d 31 32 30 78 31 32 30 2e 70 6e 67 22 #> [749] 3e 0a 3c 6c 69 6e 6b 20 72 65 6c 3d 22 61 70 70 6c 65 2d 74 6f 75 #> [771] 63 68 2d 69 63 6f 6e 22 20 74 79 70 65 3d 22 69 6d 61 67 65 2f 70 #> [793] 6e 67 22 20 73 69 7a 65 73 3d 22 37 36 78 37 36 22 20 68 72 65 66 #> [815] 3d 22 61 70 70 6c 65 2d 74 6f 75 63 68 2d 69 63 6f 6e 2d 37 36 78 #> [837] 37 36 2e 70 6e 67 22 3e 0a 3c 6c 69 6e 6b 20 72 65 6c 3d 22 61 70 #> [859] 70 6c 65 2d 74 6f 75 63 68 2d 69 63 6f 6e 22 20 74 79 70 65 3d 22 #> [881] 69 6d 61 67 65 2f 70 6e 67 22 20 73 69 7a 65 73 3d 22 36 30 78 36 #> [903] 30 22 20 68 72 65 66 3d 22 61 70 70 6c 65 2d 74 6f 75 63 68 2d 69 #> [925] 63 6f 6e 2d 36 30 78 36 30 2e 70 6e 67 22 3e 0a 3c 73 63 72 69 70 #> [947] 74 20 73 72 63 3d 22 64 65 70 73 2f 6a 71 75 65 72 79 2d 33 2e 36 #> [969] 2e 30 2f 6a 71 75 65 72 79 2d 33 2e 36 2e 30 2e 6d 69 6e 2e 6a 73 #> [991] 22 3e 3c 2f 73 63 72 69 70 74 3e 3c 6d 65 74 61 20 6e 61 6d 65 3d #> [1013] 22 76 69 65 77 70 6f 72 74 22 20 63 6f 6e 74 65 6e 74 3d 22 77 69 #> [1035] 64 74 68 3d 64 65 76 69 63 65 2d 77 69 64 74 68 2c 20 69 6e 69 74 #> [1057] 69 61 6c 2d 73 63 61 6c 65 3d 31 2c 20 73 68 72 69 6e 6b 2d 74 6f #> [1079] 2d 66 69 74 3d 6e 6f 22 3e 0a 3c 6c 69 6e 6b 20 68 72 65 66 3d 22 #> [1101] 64 65 70 73 2f 62 6f 6f 74 73 74 72 61 70 2d 35 2e 33 2e 31 2f 62 #> [1123] 6f 6f 74 73 74 72 61 70 2e 6d 69 6e 2e 63 73 73 22 20 72 65 6c 3d #> [1145] 22 73 74 79 6c 65 73 68 65 65 74 22 3e 0a 3c 73 63 72 69 70 74 20 #> [1167] 73 72 63 3d 22 64 65 70 73 2f 62 6f 6f 74 73 74 72 61 70 2d 35 2e #> [1189] 33 2e 31 2f 62 6f 6f 74 73 74 72 61 70 2e 62 75 6e 64 6c 65 2e 6d #> [1211] 69 6e 2e 6a 73 22 3e 3c 2f 73 63 72 69 70 74 3e 3c 6c 69 6e 6b 20 #> [1233] 68 72 65 66 3d 22 64 65 70 73 2f 53 6f 75 72 63 65 5f 53 61 6e 73 #> [1255] 5f 50 72 6f 2d 30 2e 34 2e 39 2f 66 6f 6e 74 2e 63 73 73 22 20 72 #> [1277] 65 6c 3d 22 73 74 79 6c 65 73 68 65 65 74 22 3e 0a 3c 6c 69 6e 6b #> [1299] 20 68 72 65 66 3d 22 64 65 70 73 2f 53 6f 75 72 63 65 5f 43 6f 64 #> [1321] 65 5f 50 72 6f 2d 30 2e 34 2e 39 2f 66 6f 6e 74 2e 63 73 73 22 20 #> [1343] 72 65 6c 3d 22 73 74 79 6c 65 73 68 65 65 74 22 3e 0a 3c 6c 69 6e #> [1365] 6b 20 68 72 65 66 3d 22 64 65 70 73 2f 66 6f 6e 74 2d 61 77 65 73 #> [1387] 6f 6d 65 2d 36 2e 34 2e 32 2f 63 73 73 2f 61 6c 6c 2e 6d 69 6e 2e #> [1409] 63 73 73 22 20 72 65 6c 3d 22 73 74 79 6c 65 73 68 65 65 74 22 3e #> [1431] 0a 3c 6c 69 6e 6b 20 68 72 65 66 3d 22 64 65 70 73 2f 66 6f 6e 74 #> [1453] 2d 61 77 65 73 6f 6d 65 2d 36 2e 34 2e 32 2f 63 73 73 2f 76 34 2d #> [1475] 73 68 69 6d 73 2e 6d 69 6e 2e 63 73 73 22 20 72 65 6c 3d 22 73 74 #> [1497] 79 6c 65 73 68 65 65 74 22 3e 0a 3c 73 63 72 69 70 74 20 73 72 63 #> [1519] 3d 22 64 65 70 73 2f 68 65 61 64 72 6f 6f 6d 2d 30 2e 31 31 2e 30 #> [1541] 2f 68 65 61 64 72 6f 6f 6d 2e 6d 69 6e 2e 6a 73 22 3e 3c 2f 73 63 #> [1563] 72 69 70 74 3e 3c 73 63 72 69 70 74 20 73 72 63 3d 22 64 65 70 73 #> [1585] 2f 68 65 61 64 72 6f 6f 6d 2d 30 2e 31 31 2e 30 2f 6a 51 75 65 72 #> [1607] 79 2e 68 65 61 64 72 6f 6f 6d 2e 6d 69 6e 2e 6a 73 22 3e 3c 2f 73 #> [1629] 63 72 69 70 74 3e 3c 73 63 72 69 70 74 20 73 72 63 3d 22 64 65 70 #> [1651] 73 2f 62 6f 6f 74 73 74 72 61 70 2d 74 6f 63 2d 31 2e 30 2e 31 2f #> [1673] 62 6f 6f 74 73 74 72 61 70 2d 74 6f 63 2e 6d 69 6e 2e 6a 73 22 3e #> [1695] 3c 2f 73 63 72 69 70 74 3e 3c 73 63 72 69 70 74 20 73 72 63 3d 22 #> [1717] 64 65 70 73 2f 63 6c 69 70 62 6f 61 72 64 2e 6a 73 2d 32 2e 30 2e #> [1739] 31 31 2f 63 6c 69 70 62 6f 61 72 64 2e 6d 69 6e 2e 6a 73 22 3e 3c #> [1761] 2f 73 63 72 69 70 74 3e 3c 73 63 72 69 70 74 20 73 72 63 3d 22 64 #> [1783] 65 70 73 2f 73 65 61 72 63 68 2d 31 2e 30 2e 30 2f 61 75 74 6f 63 #> [1805] 6f 6d 70 6c 65 74 65 2e 6a 71 75 65 72 79 2e 6d 69 6e 2e 6a 73 22 #> [1827] 3e 3c 2f 73 63 72 69 70 74 3e 3c 73 63 72 69 70 74 20 73 72 63 3d #> [1849] 22 64 65 70 73 2f 73 65 61 72 63 68 2d 31 2e 30 2e 30 2f 66 75 73 #> [1871] 65 2e 6d 69 6e 2e 6a 73 22 3e 3c 2f 73 63 72 69 70 74 3e 3c 73 63 #> [1893] 72 69 70 74 20 73 72 63 3d 22 64 65 70 73 2f 73 65 61 72 63 68 2d #> [1915] 31 2e 30 2e 30 2f 6d 61 72 6b 2e 6d 69 6e 2e 6a 73 22 3e 3c 2f 73 #> [1937] 63 72 69 70 74 3e 3c 21 2d 2d 20 70 6b 67 64 6f 77 6e 20 2d 2d 3e #> [1959] 3c 73 63 72 69 70 74 20 73 72 63 3d 22 70 6b 67 64 6f 77 6e 2e 6a #> [1981] 73 22 3e 3c 2f 73 63 72 69 70 74 3e 3c 6d 65 74 61 20 70 72 6f 70 #> [2003] 65 72 74 79 3d 22 6f 67 3a 74 69 74 6c 65 22 20 63 6f 6e 74 65 6e #> [2025] 74 3d 22 50 65 72 66 6f 72 6d 20 48 54 54 50 20 52 65 71 75 65 73 #> [2047] 74 73 20 61 6e 64 20 50 72 6f 63 65 73 73 20 74 68 65 20 52 65 73 #> [2069] 70 6f 6e 73 65 73 22 3e 0a 3c 6d 65 74 61 20 6e 61 6d 65 3d 22 64 #> [2091] 65 73 63 72 69 70 74 69 6f 6e 22 20 63 6f 6e 74 65 6e 74 3d 22 54 #> [2113] 6f 6f 6c 73 20 66 6f 72 20 63 72 65 61 74 69 6e 67 20 61 6e 64 20 #> [2135] 6d 6f 64 69 66 79 69 6e 67 20 48 54 54 50 20 72 65 71 75 65 73 74 #> [2157] 73 2c 20 74 68 65 6e 20 70 65 72 66 6f 72 6d 69 6e 67 20 74 68 65 #> [2179] 6d 20 61 6e 64 20 70 72 6f 63 65 73 73 69 6e 67 20 74 68 65 20 72 #> [2201] 65 73 75 6c 74 73 2e 20 68 74 74 72 32 20 69 73 20 61 20 6d 6f 64 #> [2223] 65 72 6e 20 72 65 2d 69 6d 61 67 69 6e 69 6e 67 20 6f 66 20 68 74 #> [2245] 74 72 20 74 68 61 74 20 75 73 65 73 20 61 20 70 69 70 65 2d 62 61 #> [2267] 73 65 64 20 69 6e 74 65 72 66 61 63 65 20 61 6e 64 20 73 6f 6c 76 #> [2289] 65 73 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 70 72 6f 62 6c 65 6d #> [2311] 73 20 74 68 61 74 20 41 50 49 20 77 72 61 70 70 69 6e 67 20 70 61 #> [2333] 63 6b 61 67 65 73 20 66 61 63 65 2e 22 3e 0a 3c 6d 65 74 61 20 70 #> [2355] 72 6f 70 65 72 74 79 3d 22 6f 67 3a 64 65 73 63 72 69 70 74 69 6f #> [2377] 6e 22 20 63 6f 6e 74 65 6e 74 3d 22 54 6f 6f 6c 73 20 66 6f 72 20 #> [2399] 63 72 65 61 74 69 6e 67 20 61 6e 64 20 6d 6f 64 69 66 79 69 6e 67 #> [2421] 20 48 54 54 50 20 72 65 71 75 65 73 74 73 2c 20 74 68 65 6e 20 70 #> [2443] 65 72 66 6f 72 6d 69 6e 67 20 74 68 65 6d 20 61 6e 64 20 70 72 6f #> [2465] 63 65 73 73 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 73 2e 20 68 #> [2487] 74 74 72 32 20 69 73 20 61 20 6d 6f 64 65 72 6e 20 72 65 2d 69 6d #> [2509] 61 67 69 6e 69 6e 67 20 6f 66 20 68 74 74 72 20 74 68 61 74 20 75 #> [2531] 73 65 73 20 61 20 70 69 70 65 2d 62 61 73 65 64 20 69 6e 74 65 72 #> [2553] 66 61 63 65 20 61 6e 64 20 73 6f 6c 76 65 73 20 6d 6f 72 65 20 6f #> [2575] 66 20 74 68 65 20 70 72 6f 62 6c 65 6d 73 20 74 68 61 74 20 41 50 #> [2597] 49 20 77 72 61 70 70 69 6e 67 20 70 61 63 6b 61 67 65 73 20 66 61 #> [2619] 63 65 2e 22 3e 0a 3c 6d 65 74 61 20 70 72 6f 70 65 72 74 79 3d 22 #> [2641] 6f 67 3a 69 6d 61 67 65 22 20 63 6f 6e 74 65 6e 74 3d 22 68 74 74 #> [2663] 70 73 3a 2f 2f 68 74 74 72 32 2e 72 2d 6c 69 62 2e 6f 72 67 2f 6c #> [2685] 6f 67 6f 2e 70 6e 67 22 3e 0a 3c 73 63 72 69 70 74 20 64 65 66 65 #> [2707] 72 20 64 61 74 61 2d 64 6f 6d 61 69 6e 3d 22 68 74 74 72 32 2e 72 #> [2729] 2d 6c 69 62 2e 6f 72 67 2c 61 6c 6c 2e 74 69 64 79 76 65 72 73 65 #> [2751] 2e 6f 72 67 22 20 73 72 63 3d 22 68 74 74 70 73 3a 2f 2f 70 6c 61 #> [2773] 75 73 69 62 6c 65 2e 69 6f 2f 6a 73 2f 70 6c 61 75 73 69 62 6c 65 #> [2795] 2e 6a 73 22 3e 3c 2f 73 63 72 69 70 74 3e 0a 3c 2f 68 65 61 64 3e #> [2817] 0a 3c 62 6f 64 79 3e 0a 20 20 20 20 3c 61 20 68 72 65 66 3d 22 23 #> [2839] 63 6f 6e 74 61 69 6e 65 72 22 20 63 6c 61 73 73 3d 22 76 69 73 75 #> [2861] 61 6c 6c 79 2d 68 69 64 64 65 6e 2d 66 6f 63 75 73 61 62 6c 65 22 #> [2883] 3e 53 6b 69 70 20 74 6f 20 63 6f 6e 74 65 6e 74 3c 2f 61 3e 0a 0a #> [2905] 0a 20 20 20 20 3c 6e 61 76 20 63 6c 61 73 73 3d 22 6e 61 76 62 61 #> [2927] 72 20 6e 61 76 62 61 72 2d 65 78 70 61 6e 64 2d 6c 67 20 66 69 78 #> [2949] 65 64 2d 74 6f 70 20 62 67 2d 6e 6f 6e 65 22 20 64 61 74 61 2d 62 #> [2971] 73 2d 74 68 65 6d 65 3d 22 6c 69 67 68 74 22 20 61 72 69 61 2d 6c #> [2993] 61 62 65 6c 3d 22 53 69 74 65 20 6e 61 76 69 67 61 74 69 6f 6e 22 #> [3015] 3e 3c 64 69 76 20 63 6c 61 73 73 3d 22 63 6f 6e 74 61 69 6e 65 72 #> [3037] 22 3e 0a 0a 20 20 20 20 3c 61 20 63 6c 61 73 73 3d 22 6e 61 76 62 #> [3059] 61 72 2d 62 72 61 6e 64 20 6d 65 2d 32 22 20 68 72 65 66 3d 22 69 #> [3081] 6e 64 65 78 2e 68 74 6d 6c 22 3e 68 74 74 72 32 3c 2f 61 3e 0a 0a #> [3103] 20 20 20 20 3c 73 6d 61 6c 6c 20 63 6c 61 73 73 3d 22 6e 61 76 2d #> [3125] 74 65 78 74 20 74 65 78 74 2d 6d 75 74 65 64 20 6d 65 2d 61 75 74 #> [3147] 6f 22 20 64 61 74 61 2d 62 73 2d 74 6f 67 67 6c 65 3d 22 74 6f 6f #> [3169] 6c 74 69 70 22 20 64 61 74 61 2d 62 73 2d 70 6c 61 63 65 6d 65 6e #> [3191] 74 3d 22 62 6f 74 74 6f 6d 22 20 74 69 74 6c 65 3d 22 52 65 6c 65 #> [3213] 61 73 65 64 20 76 65 72 73 69 6f 6e 22 3e 31 2e 30 2e 33 3c 2f 73 #> [3235] 6d 61 6c 6c 3e 0a 0a 0a 20 20 20 20 3c 62 75 74 74 6f 6e 20 63 6c #> [3257] 61 73 73 3d 22 6e 61 76 62 61 72 2d 74 6f 67 67 6c 65 72 22 20 74 #> [3279] 79 70 65 3d 22 62 75 74 74 6f 6e 22 20 64 61 74 61 2d 62 73 2d 74 #> [3301] 6f 67 67 6c 65 3d 22 63 6f 6c 6c 61 70 73 65 22 20 64 61 74 61 2d #> [3323] 62 73 2d 74 61 72 67 65 74 3d 22 23 6e 61 76 62 61 72 22 20 61 72 #> [3345] 69 61 2d 63 6f 6e 74 72 6f 6c 73 3d 22 6e 61 76 62 61 72 22 20 61 #> [3367] 72 69 61 2d 65 78 70 61 6e 64 65 64 3d 22 66 61 6c 73 65 22 20 61 #> [3389] 72 69 61 2d 6c 61 62 65 6c 3d 22 54 6f 67 67 6c 65 20 6e 61 76 69 #> [3411] 67 61 74 69 6f 6e 22 3e 0a 20 20 20 20 20 20 3c 73 70 61 6e 20 63 #> [3433] 6c 61 73 73 3d 22 6e 61 76 62 61 72 2d 74 6f 67 67 6c 65 72 2d 69 #> [3455] 63 6f 6e 22 3e 3c 2f 73 70 61 6e 3e 0a 20 20 20 20 3c 2f 62 75 74 #> [3477] 74 6f 6e 3e 0a 0a 20 20 20 20 3c 64 69 76 20 69 64 3d 22 6e 61 76 #> [3499] 62 61 72 22 20 63 6c 61 73 73 3d 22 63 6f 6c 6c 61 70 73 65 20 6e #> [3521] 61 76 62 61 72 2d 63 6f 6c 6c 61 70 73 65 20 6d 73 2d 33 22 3e 0a #> [3543] 20 20 20 20 20 20 3c 75 6c 20 63 6c 61 73 73 3d 22 6e 61 76 62 61 #> [3565] 72 2d 6e 61 76 20 6d 65 2d 61 75 74 6f 22 3e 0a 3c 6c 69 20 63 6c #> [3587] 61 73 73 3d 22 6e 61 76 2d 69 74 65 6d 22 3e 3c 61 20 63 6c 61 73 #> [3609] 73 3d 22 6e 61 76 2d 6c 69 6e 6b 22 20 68 72 65 66 3d 22 61 72 74 #> [3631] 69 63 6c 65 73 2f 68 74 74 72 32 2e 68 74 6d 6c 22 3e 47 65 74 20 #> [3653] 73 74 61 72 74 65 64 3c 2f 61 3e 3c 2f 6c 69 3e 0a 3c 6c 69 20 63 #> [3675] 6c 61 73 73 3d 22 6e 61 76 2d 69 74 65 6d 22 3e 3c 61 20 63 6c 61 #> [3697] 73 73 3d 22 6e 61 76 2d 6c 69 6e 6b 22 20 68 72 65 66 3d 22 72 65 #> [3719] 66 65 72 65 6e 63 65 2f 69 6e 64 65 78 2e 68 74 6d 6c 22 3e 52 65 #> [3741] 66 65 72 65 6e 63 65 3c 2f 61 3e 3c 2f 6c 69 3e 0a 3c 6c 69 20 63 #> [3763] 6c 61 73 73 3d 22 6e 61 76 2d 69 74 65 6d 20 64 72 6f 70 64 6f 77 #> [3785] 6e 22 3e 0a 20 20 3c 62 75 74 74 6f 6e 20 63 6c 61 73 73 3d 22 6e #> [3807] 61 76 2d 6c 69 6e 6b 20 64 72 6f 70 64 6f 77 6e 2d 74 6f 67 67 6c #> [3829] 65 22 20 74 79 70 65 3d 22 62 75 74 74 6f 6e 22 20 69 64 3d 22 64 #> [3851] 72 6f 70 64 6f 77 6e 2d 61 72 74 69 63 6c 65 73 22 20 64 61 74 61 #> [3873] 2d 62 73 2d 74 6f 67 67 6c 65 3d 22 64 72 6f 70 64 6f 77 6e 22 20 #> [3895] 61 72 69 61 2d 65 78 70 61 6e 64 65 64 3d 22 66 61 6c 73 65 22 20 #> [3917] 61 72 69 61 2d 68 61 73 70 6f 70 75 70 3d 22 74 72 75 65 22 3e 41 #> [3939] 72 74 69 63 6c 65 73 3c 2f 62 75 74 74 6f 6e 3e 0a 20 20 3c 75 6c #> [3961] 20 63 6c 61 73 73 3d 22 64 72 6f 70 64 6f 77 6e 2d 6d 65 6e 75 22 #> [3983] 20 61 72 69 61 2d 6c 61 62 65 6c 6c 65 64 62 79 3d 22 64 72 6f 70 #> [4005] 64 6f 77 6e 2d 61 72 74 69 63 6c 65 73 22 3e 0a 3c 6c 69 3e 3c 61 #> [4027] 20 63 6c 61 73 73 3d 22 64 72 6f 70 64 6f 77 6e 2d 69 74 65 6d 22 #> [4049] 20 68 72 65 66 3d 22 61 72 74 69 63 6c 65 73 2f 77 72 61 70 70 69 #> [4071] 6e 67 2d 61 70 69 73 2e 68 74 6d 6c 22 3e 57 72 61 70 70 69 6e 67 #> [4093] 20 41 50 49 73 3c 2f 61 3e 3c 2f 6c 69 3e 0a 20 20 20 20 3c 6c 69 #> [4115] 3e 3c 61 20 63 6c 61 73 73 3d 22 64 72 6f 70 64 6f 77 6e 2d 69 74 #> [4137] 65 6d 22 20 68 72 65 66 3d 22 61 72 74 69 63 6c 65 73 2f 6f 61 75 #> [4159] 74 68 2e 68 74 6d 6c 22 3e 4f 41 75 74 68 3c 2f 61 3e 3c 2f 6c 69 #> [4181] 3e 0a 20 20 3c 2f 75 6c 3e 0a 3c 2f 6c 69 3e 0a 3c 6c 69 20 63 6c #> [4203] 61 73 73 3d 22 6e 61 76 2d 69 74 65 6d 20 64 72 6f 70 64 6f 77 6e #> [4225] 22 3e 0a 20 20 3c 62 75 74 74 6f 6e 20 63 6c 61 73 73 3d 22 6e 61 #> [4247] 76 2d 6c 69 6e 6b 20 64 72 6f 70 64 6f 77 6e 2d 74 6f 67 67 6c 65 #> [4269] 22 20 74 79 70 65 3d 22 62 75 74 74 6f 6e 22 20 69 64 3d 22 64 72 #> [4291] 6f 70 64 6f 77 6e 2d 6e 65 77 73 22 20 64 61 74 61 2d 62 73 2d 74 #> [4313] 6f 67 67 6c 65 3d 22 64 72 6f 70 64 6f 77 6e 22 20 61 72 69 61 2d #> [4335] 65 78 70 61 6e 64 65 64 3d 22 66 61 6c 73 65 22 20 61 72 69 61 2d #> [4357] 68 61 73 70 6f 70 75 70 3d 22 74 72 75 65 22 3e 4e 65 77 73 3c 2f #> [4379] 62 75 74 74 6f 6e 3e 0a 20 20 3c 75 6c 20 63 6c 61 73 73 3d 22 64 #> [4401] 72 6f 70 64 6f 77 6e 2d 6d 65 6e 75 22 20 61 72 69 61 2d 6c 61 62 #> [4423] 65 6c 6c 65 64 62 79 3d 22 64 72 6f 70 64 6f 77 6e 2d 6e 65 77 73 #> [4445] 22 3e 0a 3c 6c 69 3e 3c 68 36 20 63 6c 61 73 73 3d 22 64 72 6f 70 #> [4467] 64 6f 77 6e 2d 68 65 61 64 65 72 22 20 64 61 74 61 2d 74 6f 63 2d #> [4489] 73 6b 69 70 3e 52 65 6c 65 61 73 65 73 3c 2f 68 36 3e 3c 2f 6c 69 #> [4511] 3e 0a 20 20 20 20 3c 6c 69 3e 3c 61 20 63 6c 61 73 73 3d 22 65 78 #> [4533] 74 65 72 6e 61 6c 2d 6c 69 6e 6b 20 64 72 6f 70 64 6f 77 6e 2d 69 #> [4555] 74 65 6d 22 20 68 72 65 66 3d 22 68 74 74 70 73 3a 2f 2f 77 77 77 #> [4577] 2e 74 69 64 79 76 65 72 73 65 2e 6f 72 67 2f 62 6c 6f 67 2f 32 30 #> [4599] 32 33 2f 31 31 2f 68 74 74 72 32 2d 31 2d 30 2d 30 2f 22 3e 68 74 #> [4621] 74 72 32 20 31 2e 30 2e 30 3c 2f 61 3e 3c 2f 6c 69 3e 0a 20 20 20 #> [4643] 20 3c 6c 69 3e 3c 68 72 20 63 6c 61 73 73 3d 22 64 72 6f 70 64 6f #> [4665] 77 6e 2d 64 69 76 69 64 65 72 22 3e 3c 2f 6c 69 3e 0a 20 20 20 20 #> [4687] 3c 6c 69 3e 3c 61 20 63 6c 61 73 73 3d 22 64 72 6f 70 64 6f 77 6e #> [4709] 2d 69 74 65 6d 22 20 68 72 65 66 3d 22 6e 65 77 73 2f 69 6e 64 65 #> [4731] 78 2e 68 74 6d 6c 22 3e 43 68 61 6e 67 65 6c 6f 67 3c 2f 61 3e 3c #> [4753] 2f 6c 69 3e 0a 20 20 3c 2f 75 6c 3e 0a 3c 2f 6c 69 3e 0a 20 20 20 #> [4775] 20 20 20 3c 2f 75 6c 3e 0a 3c 75 6c 20 63 6c 61 73 73 3d 22 6e 61 #> [4797] 76 62 61 72 2d 6e 61 76 22 3e 0a 3c 6c 69 20 63 6c 61 73 73 3d 22 #> [4819] 6e 61 76 2d 69 74 65 6d 22 3e 3c 66 6f 72 6d 20 63 6c 61 73 73 3d #> [4841] 22 66 6f 72 6d 2d 69 6e 6c 69 6e 65 22 20 72 6f 6c 65 3d 22 73 65 #> [4863] 61 72 63 68 22 3e 0a 20 3c 69 6e 70 75 74 20 63 6c 61 73 73 3d 22 #> [4885] 66 6f 72 6d 2d 63 6f 6e 74 72 6f 6c 22 20 74 79 70 65 3d 22 73 65 #> [4907] 61 72 63 68 22 20 6e 61 6d 65 3d 22 73 65 61 72 63 68 2d 69 6e 70 #> [4929] 75 74 22 20 69 64 3d 22 73 65 61 72 63 68 2d 69 6e 70 75 74 22 20 #> [4951] 61 75 74 6f 63 6f 6d 70 6c 65 74 65 3d 22 6f 66 66 22 20 61 72 69 #> [4973] 61 2d 6c 61 62 65 6c 3d 22 53 65 61 72 63 68 20 73 69 74 65 22 20 #> [4995] 70 6c 61 63 65 68 6f 6c 64 65 72 3d 22 53 65 61 72 63 68 20 66 6f #> [5017] 72 22 20 64 61 74 61 2d 73 65 61 72 63 68 2d 69 6e 64 65 78 3d 22 #> [5039] 73 65 61 72 63 68 2e 6a 73 6f 6e 22 3e 0a 3c 2f 66 6f 72 6d 3e 3c #> [5061] 2f 6c 69 3e 0a 3c 6c 69 20 63 6c 61 73 73 3d 22 6e 61 76 2d 69 74 #> [5083] 65 6d 22 3e 3c 61 20 63 6c 61 73 73 3d 22 65 78 74 65 72 6e 61 6c #> [5105] 2d 6c 69 6e 6b 20 6e 61 76 2d 6c 69 6e 6b 22 20 68 72 65 66 3d 22 #> [5127] 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 72 2d 6c #> [5149] 69 62 2f 68 74 74 72 32 2f 22 20 61 72 69 61 2d 6c 61 62 65 6c 3d #> [5171] 22 47 69 74 48 75 62 22 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 #> [5193] 66 61 20 66 61 62 20 66 61 2d 67 69 74 68 75 62 20 66 61 2d 6c 67 #> [5215] 22 3e 3c 2f 73 70 61 6e 3e 3c 2f 61 3e 3c 2f 6c 69 3e 0a 20 20 20 #> [5237] 20 20 20 3c 2f 75 6c 3e 0a 3c 2f 64 69 76 3e 0a 0a 0a 20 20 3c 2f #> [5259] 64 69 76 3e 0a 3c 2f 6e 61 76 3e 3c 64 69 76 20 63 6c 61 73 73 3d #> [5281] 22 63 6f 6e 74 61 69 6e 65 72 20 74 65 6d 70 6c 61 74 65 2d 68 6f #> [5303] 6d 65 22 20 69 64 3d 22 63 6f 6e 74 61 69 6e 65 72 22 3e 0a 3c 64 #> [5325] 69 76 20 63 6c 61 73 73 3d 22 72 6f 77 22 3e 0a 20 20 3c 6d 61 69 #> [5347] 6e 20 69 64 3d 22 6d 61 69 6e 22 20 63 6c 61 73 73 3d 22 63 6f 6c #> [5369] 2d 6d 64 2d 39 22 3e 3c 64 69 76 20 63 6c 61 73 73 3d 22 73 65 63 #> [5391] 74 69 6f 6e 20 6c 65 76 65 6c 31 22 3e 0a 3c 64 69 76 20 63 6c 61 #> [5413] 73 73 3d 22 70 61 67 65 2d 68 65 61 64 65 72 22 3e 0a 3c 69 6d 67 #> [5435] 20 73 72 63 3d 22 6c 6f 67 6f 2e 70 6e 67 22 20 63 6c 61 73 73 3d #> [5457] 22 6c 6f 67 6f 22 20 61 6c 74 3d 22 22 3e 3c 68 31 20 69 64 3d 22 #> [5479] 68 74 74 72 32 2d 22 3e 68 74 74 72 32 20 0a 3c 61 20 63 6c 61 73 #> [5501] 73 3d 22 61 6e 63 68 6f 72 22 20 61 72 69 61 2d 6c 61 62 65 6c 3d #> [5523] 22 61 6e 63 68 6f 72 22 20 68 72 65 66 3d 22 23 68 74 74 72 32 2d #> [5545] 22 3e 3c 2f 61 3e 0a 3c 2f 68 31 3e 0a 3c 2f 64 69 76 3e 0a 3c 21 #> [5567] 2d 2d 20 62 61 64 67 65 73 3a 20 73 74 61 72 74 20 2d 2d 3e 0a 0a #> [5589] 3c 70 3e 68 74 74 72 32 20 28 70 72 6f 6e 6f 75 6e 63 65 64 20 68 #> [5611] 69 74 74 65 72 32 29 20 69 73 20 61 20 67 72 6f 75 6e 64 2d 75 70 #> [5633] 20 72 65 77 72 69 74 65 20 6f 66 20 3c 61 20 68 72 65 66 3d 22 68 #> [5655] 74 74 70 73 3a 2f 2f 68 74 74 72 2e 72 2d 6c 69 62 2e 6f 72 67 22 #> [5677] 20 63 6c 61 73 73 3d 22 65 78 74 65 72 6e 61 6c 2d 6c 69 6e 6b 22 #> [5699] 3e 68 74 74 72 3c 2f 61 3e 20 74 68 61 74 20 70 72 6f 76 69 64 65 #> [5721] 73 20 61 20 70 69 70 65 61 62 6c 65 20 41 50 49 20 77 69 74 68 20 #> [5743] 61 6e 20 65 78 70 6c 69 63 69 74 20 72 65 71 75 65 73 74 20 6f 62 #> [5765] 6a 65 63 74 20 74 68 61 74 20 73 6f 6c 76 65 73 20 6d 6f 72 65 20 #> [5787] 70 72 6f 62 6c 65 6d 73 20 66 65 6c 74 20 62 79 20 70 61 63 6b 61 #> [5809] 67 65 73 20 74 68 61 74 20 77 72 61 70 20 41 50 49 73 20 28 65 2e #> [5831] 67 2e c2 a0 62 75 69 6c 74 2d 69 6e 20 72 61 74 65 2d 6c 69 6d 69 #> [5853] 74 69 6e 67 2c 20 72 65 74 72 69 65 73 2c 20 4f 41 75 74 68 2c 20 #> [5875] 73 65 63 75 72 65 20 73 65 63 72 65 74 73 2c 20 61 6e 64 20 6d 6f #> [5897] 72 65 29 2e 3c 2f 70 3e 0a 3c 64 69 76 20 63 6c 61 73 73 3d 22 73 #> [5919] 65 63 74 69 6f 6e 20 6c 65 76 65 6c 32 22 3e 0a 3c 68 32 20 69 64 #> [5941] 3d 22 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 22 3e 49 6e 73 74 61 6c #> [5963] 6c 61 74 69 6f 6e 3c 61 20 63 6c 61 73 73 3d 22 61 6e 63 68 6f 72 #> [5985] 22 20 61 72 69 61 2d 6c 61 62 65 6c 3d 22 61 6e 63 68 6f 72 22 20 #> [6007] 68 72 65 66 3d 22 23 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 22 3e 3c #> [6029] 2f 61 3e 0a 3c 2f 68 32 3e 0a 3c 70 3e 59 6f 75 20 63 61 6e 20 69 #> [6051] 6e 73 74 61 6c 6c 20 68 74 74 72 32 20 66 72 6f 6d 20 43 52 41 4e #> [6073] 20 77 69 74 68 3a 3c 2f 70 3e 0a 3c 64 69 76 20 63 6c 61 73 73 3d #> [6095] 22 73 6f 75 72 63 65 43 6f 64 65 22 20 69 64 3d 22 63 62 31 22 3e #> [6117] 3c 70 72 65 20 63 6c 61 73 73 3d 22 64 6f 77 6e 6c 69 74 20 73 6f #> [6139] 75 72 63 65 43 6f 64 65 20 72 22 3e 0a 3c 63 6f 64 65 20 63 6c 61 #> [6161] 73 73 3d 22 73 6f 75 72 63 65 43 6f 64 65 20 52 22 3e 3c 73 70 61 #> [6183] 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 66 75 22 3e 3c 61 20 #> [6205] 68 72 65 66 3d 22 68 74 74 70 73 3a 2f 2f 72 64 72 72 2e 69 6f 2f #> [6227] 72 2f 75 74 69 6c 73 2f 69 6e 73 74 61 6c 6c 2e 70 61 63 6b 61 67 #> [6249] 65 73 2e 68 74 6d 6c 22 20 63 6c 61 73 73 3d 22 65 78 74 65 72 6e #> [6271] 61 6c 2d 6c 69 6e 6b 22 3e 69 6e 73 74 61 6c 6c 2e 70 61 63 6b 61 #> [6293] 67 65 73 3c 2f 61 3e 3c 2f 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c #> [6315] 61 73 73 3d 22 6f 70 22 3e 28 3c 2f 73 70 61 6e 3e 3c 73 70 61 6e #> [6337] 20 63 6c 61 73 73 3d 22 73 74 22 3e 22 68 74 74 72 32 22 3c 2f 73 #> [6359] 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 6f 70 22 3e 29 #> [6381] 3c 2f 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e 3c 2f 63 6f 64 65 3e 3c #> [6403] 2f 70 72 65 3e 3c 2f 64 69 76 3e 0a 3c 2f 64 69 76 3e 0a 3c 64 69 #> [6425] 76 20 63 6c 61 73 73 3d 22 73 65 63 74 69 6f 6e 20 6c 65 76 65 6c #> [6447] 32 22 3e 0a 3c 68 32 20 69 64 3d 22 75 73 61 67 65 22 3e 55 73 61 #> [6469] 67 65 3c 61 20 63 6c 61 73 73 3d 22 61 6e 63 68 6f 72 22 20 61 72 #> [6491] 69 61 2d 6c 61 62 65 6c 3d 22 61 6e 63 68 6f 72 22 20 68 72 65 66 #> [6513] 3d 22 23 75 73 61 67 65 22 3e 3c 2f 61 3e 0a 3c 2f 68 32 3e 0a 3c #> [6535] 70 3e 54 6f 20 75 73 65 20 68 74 74 72 32 2c 20 73 74 61 72 74 20 #> [6557] 62 79 20 63 72 65 61 74 69 6e 67 20 61 20 3c 73 74 72 6f 6e 67 3e #> [6579] 72 65 71 75 65 73 74 3c 2f 73 74 72 6f 6e 67 3e 3a 3c 2f 70 3e 0a #> [6601] 3c 64 69 76 20 63 6c 61 73 73 3d 22 73 6f 75 72 63 65 43 6f 64 65 #> [6623] 22 20 69 64 3d 22 63 62 32 22 3e 3c 70 72 65 20 63 6c 61 73 73 3d #> [6645] 22 64 6f 77 6e 6c 69 74 20 73 6f 75 72 63 65 43 6f 64 65 20 72 22 #> [6667] 3e 0a 3c 63 6f 64 65 20 63 6c 61 73 73 3d 22 73 6f 75 72 63 65 43 #> [6689] 6f 64 65 20 52 22 3e 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 #> [6711] 73 73 3d 22 6b 77 22 3e 3c 61 20 68 72 65 66 3d 22 68 74 74 70 73 #> [6733] 3a 2f 2f 72 64 72 72 2e 69 6f 2f 72 2f 62 61 73 65 2f 6c 69 62 72 #> [6755] 61 72 79 2e 68 74 6d 6c 22 20 63 6c 61 73 73 3d 22 65 78 74 65 72 #> [6777] 6e 61 6c 2d 6c 69 6e 6b 22 3e 6c 69 62 72 61 72 79 3c 2f 61 3e 3c #> [6799] 2f 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 6f 70 22 #> [6821] 3e 28 3c 2f 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 #> [6843] 76 61 22 3e 3c 61 20 68 72 65 66 3d 22 68 74 74 70 73 3a 2f 2f 68 #> [6865] 74 74 72 32 2e 72 2d 6c 69 62 2e 6f 72 67 22 3e 68 74 74 72 32 3c #> [6887] 2f 61 3e 3c 2f 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d #> [6909] 22 6f 70 22 3e 29 3c 2f 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e 0a 3c #> [6931] 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 70 #> [6953] 61 6e 20 63 6c 61 73 73 3d 22 76 61 22 3e 72 65 71 3c 2f 73 70 61 #> [6975] 6e 3e 20 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 6f 70 22 3e 26 6c #> [6997] 74 3b 2d 3c 2f 73 70 61 6e 3e 20 3c 73 70 61 6e 20 63 6c 61 73 73 #> [7019] 3d 22 66 75 22 3e 3c 61 20 68 72 65 66 3d 22 72 65 66 65 72 65 6e #> [7041] 63 65 2f 72 65 71 75 65 73 74 2e 68 74 6d 6c 22 3e 72 65 71 75 65 #> [7063] 73 74 3c 2f 61 3e 3c 2f 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 #> [7085] 73 73 3d 22 6f 70 22 3e 28 3c 2f 73 70 61 6e 3e 3c 73 70 61 6e 20 #> [7107] 63 6c 61 73 73 3d 22 73 74 22 3e 22 68 74 74 70 73 3a 2f 2f 72 2d #> [7129] 70 72 6f 6a 65 63 74 2e 6f 72 67 22 3c 2f 73 70 61 6e 3e 3c 73 70 #> [7151] 61 6e 20 63 6c 61 73 73 3d 22 6f 70 22 3e 29 3c 2f 73 70 61 6e 3e #> [7173] 3c 2f 73 70 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c #> [7195] 61 73 73 3d 22 76 61 22 3e 72 65 71 3c 2f 73 70 61 6e 3e 3c 2f 73 #> [7217] 70 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 #> [7239] 3d 22 63 6f 22 3e 23 26 67 74 3b 20 26 6c 74 3b 68 74 74 72 32 5f #> [7261] 72 65 71 75 65 73 74 26 67 74 3b 3c 2f 73 70 61 6e 3e 3c 2f 73 70 #> [7283] 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d #> [7305] 22 63 6f 22 3e 23 26 67 74 3b 20 47 45 54 20 68 74 74 70 73 3a 2f #> [7327] 2f 72 2d 70 72 6f 6a 65 63 74 2e 6f 72 67 3c 2f 73 70 61 6e 3e 3c #> [7349] 2f 73 70 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 #> [7371] 73 73 3d 22 63 6f 22 3e 23 26 67 74 3b 20 42 6f 64 79 3a 20 65 6d #> [7393] 70 74 79 3c 2f 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e 3c 2f 63 6f 64 #> [7415] 65 3e 3c 2f 70 72 65 3e 3c 2f 64 69 76 3e 0a 3c 70 3e 59 6f 75 20 #> [7437] 63 61 6e 20 74 61 69 6c 6f 72 20 74 68 69 73 20 72 65 71 75 65 73 #> [7459] 74 20 77 69 74 68 20 74 68 65 20 3c 63 6f 64 65 3e 72 65 71 5f 3c #> [7481] 2f 63 6f 64 65 3e 20 66 61 6d 69 6c 79 20 6f 66 20 66 75 6e 63 74 #> [7503] 69 6f 6e 73 3a 3c 2f 70 3e 0a 3c 64 69 76 20 63 6c 61 73 73 3d 22 #> [7525] 73 6f 75 72 63 65 43 6f 64 65 22 20 69 64 3d 22 63 62 33 22 3e 3c #> [7547] 70 72 65 20 63 6c 61 73 73 3d 22 64 6f 77 6e 6c 69 74 20 73 6f 75 #> [7569] 72 63 65 43 6f 64 65 20 72 22 3e 0a 3c 63 6f 64 65 20 63 6c 61 73 #> [7591] 73 3d 22 73 6f 75 72 63 65 43 6f 64 65 20 52 22 3e 3c 73 70 61 6e #> [7613] 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 63 6f 22 3e 23 20 41 64 #> [7635] 64 20 63 75 73 74 6f 6d 20 68 65 61 64 65 72 73 3c 2f 73 70 61 6e #> [7657] 3e 3c 2f 73 70 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 63 #> [7679] 6c 61 73 73 3d 22 76 61 22 3e 72 65 71 3c 2f 73 70 61 6e 3e 20 3c #> [7701] 73 70 61 6e 20 63 6c 61 73 73 3d 22 6f 70 22 3e 7c 26 67 74 3b 3c #> [7723] 2f 73 70 61 6e 3e 20 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 66 75 #> [7745] 22 3e 3c 61 20 68 72 65 66 3d 22 72 65 66 65 72 65 6e 63 65 2f 72 #> [7767] 65 71 5f 68 65 61 64 65 72 73 2e 68 74 6d 6c 22 3e 72 65 71 5f 68 #> [7789] 65 61 64 65 72 73 3c 2f 61 3e 3c 2f 73 70 61 6e 3e 3c 73 70 61 6e #> [7811] 20 63 6c 61 73 73 3d 22 6f 70 22 3e 28 3c 2f 73 70 61 6e 3e 3c 73 #> [7833] 70 61 6e 20 63 6c 61 73 73 3d 22 73 74 22 3e 22 41 63 63 65 70 74 #> [7855] 22 3c 2f 73 70 61 6e 3e 20 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 #> [7877] 6f 70 22 3e 3d 3c 2f 73 70 61 6e 3e 20 3c 73 70 61 6e 20 63 6c 61 #> [7899] 73 73 3d 22 73 74 22 3e 22 61 70 70 6c 69 63 61 74 69 6f 6e 2f 6a #> [7921] 73 6f 6e 22 3c 2f 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 #> [7943] 3d 22 6f 70 22 3e 29 3c 2f 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e 0a #> [7965] 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 63 6f 22 #> [7987] 3e 23 26 67 74 3b 20 26 6c 74 3b 68 74 74 72 32 5f 72 65 71 75 65 #> [8009] 73 74 26 67 74 3b 3c 2f 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e 0a 3c #> [8031] 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 63 6f 22 3e #> [8053] 23 26 67 74 3b 20 47 45 54 20 68 74 74 70 73 3a 2f 2f 72 2d 70 72 #> [8075] 6f 6a 65 63 74 2e 6f 72 67 3c 2f 73 70 61 6e 3e 3c 2f 73 70 61 6e #> [8097] 3e 0a 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 63 #> [8119] 6f 22 3e 23 26 67 74 3b 20 48 65 61 64 65 72 73 3a 3c 2f 73 70 61 #> [8141] 6e 3e 3c 2f 73 70 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 #> [8163] 63 6c 61 73 73 3d 22 63 6f 22 3e 23 26 67 74 3b 20 e2 80 a2 20 41 #> [8185] 63 63 65 70 74 3a 20 27 61 70 70 6c 69 63 61 74 69 6f 6e 2f 6a 73 #> [8207] 6f 6e 27 3c 2f 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e 0a 3c 73 70 61 #> [8229] 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 63 6f 22 3e 23 26 67 #> [8251] 74 3b 20 42 6f 64 79 3a 20 65 6d 70 74 79 3c 2f 73 70 61 6e 3e 3c #> [8273] 2f 73 70 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e 0a 3c #> [8295] 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 63 6f 22 3e #> [8317] 23 20 41 64 64 20 61 20 62 6f 64 79 2c 20 74 75 72 6e 69 6e 67 20 #> [8339] 69 74 20 69 6e 74 6f 20 61 20 50 4f 53 54 3c 2f 73 70 61 6e 3e 3c #> [8361] 2f 73 70 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 #> [8383] 73 73 3d 22 76 61 22 3e 72 65 71 3c 2f 73 70 61 6e 3e 20 3c 73 70 #> [8405] 61 6e 20 63 6c 61 73 73 3d 22 6f 70 22 3e 7c 26 67 74 3b 3c 2f 73 #> [8427] 70 61 6e 3e 20 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 66 75 22 3e #> [8449] 3c 61 20 68 72 65 66 3d 22 72 65 66 65 72 65 6e 63 65 2f 72 65 71 #> [8471] 5f 62 6f 64 79 2e 68 74 6d 6c 22 3e 72 65 71 5f 62 6f 64 79 5f 6a #> [8493] 73 6f 6e 3c 2f 61 3e 3c 2f 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c #> [8515] 61 73 73 3d 22 6f 70 22 3e 28 3c 2f 73 70 61 6e 3e 3c 73 70 61 6e #> [8537] 20 63 6c 61 73 73 3d 22 66 75 22 3e 3c 61 20 68 72 65 66 3d 22 68 #> [8559] 74 74 70 73 3a 2f 2f 72 64 72 72 2e 69 6f 2f 72 2f 62 61 73 65 2f #> [8581] 6c 69 73 74 2e 68 74 6d 6c 22 20 63 6c 61 73 73 3d 22 65 78 74 65 #> [8603] 72 6e 61 6c 2d 6c 69 6e 6b 22 3e 6c 69 73 74 3c 2f 61 3e 3c 2f 73 #> [8625] 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 6f 70 22 3e 28 #> [8647] 3c 2f 73 70 61 6e 3e 78 20 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 #> [8669] 6f 70 22 3e 3d 3c 2f 73 70 61 6e 3e 20 3c 73 70 61 6e 20 63 6c 61 #> [8691] 73 73 3d 22 66 6c 22 3e 31 3c 2f 73 70 61 6e 3e 2c 20 79 20 3c 73 #> [8713] 70 61 6e 20 63 6c 61 73 73 3d 22 6f 70 22 3e 3d 3c 2f 73 70 61 6e #> [8735] 3e 20 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 66 6c 22 3e 32 3c 2f #> [8757] 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 6f 70 22 3e #> [8779] 29 3c 2f 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 6f #> [8801] 70 22 3e 29 3c 2f 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e 0a 3c 73 70 #> [8823] 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 63 6f 22 3e 23 26 #> [8845] 67 74 3b 20 26 6c 74 3b 68 74 74 72 32 5f 72 65 71 75 65 73 74 26 #> [8867] 67 74 3b 3c 2f 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e 0a 3c 73 70 61 #> [8889] 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 63 6f 22 3e 23 26 67 #> [8911] 74 3b 20 50 4f 53 54 20 68 74 74 70 73 3a 2f 2f 72 2d 70 72 6f 6a #> [8933] 65 63 74 2e 6f 72 67 3c 2f 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e 0a #> [8955] 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 63 6f 22 #> [8977] 3e 23 26 67 74 3b 20 42 6f 64 79 3a 20 6a 73 6f 6e 20 65 6e 63 6f #> [8999] 64 65 64 20 64 61 74 61 3c 2f 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e #> [9021] 0a 3c 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e 0a 3c 73 70 61 6e 3e 3c #> [9043] 73 70 61 6e 20 63 6c 61 73 73 3d 22 63 6f 22 3e 23 20 41 75 74 6f #> [9065] 6d 61 74 69 63 61 6c 6c 79 20 72 65 74 72 79 20 69 66 20 74 68 65 #> [9087] 20 72 65 71 75 65 73 74 20 66 61 69 6c 73 3c 2f 73 70 61 6e 3e 3c #> [9109] 2f 73 70 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 #> [9131] 73 73 3d 22 76 61 22 3e 72 65 71 3c 2f 73 70 61 6e 3e 20 3c 73 70 #> [9153] 61 6e 20 63 6c 61 73 73 3d 22 6f 70 22 3e 7c 26 67 74 3b 3c 2f 73 #> [9175] 70 61 6e 3e 20 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 66 75 22 3e #> [9197] 3c 61 20 68 72 65 66 3d 22 72 65 66 65 72 65 6e 63 65 2f 72 65 71 #> [9219] 5f 72 65 74 72 79 2e 68 74 6d 6c 22 3e 72 65 71 5f 72 65 74 72 79 #> [9241] 3c 2f 61 3e 3c 2f 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 #> [9263] 3d 22 6f 70 22 3e 28 3c 2f 73 70 61 6e 3e 6d 61 78 5f 74 72 69 65 #> [9285] 73 20 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 6f 70 22 3e 3d 3c 2f #> [9307] 73 70 61 6e 3e 20 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 66 6c 22 #> [9329] 3e 35 3c 2f 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 #> [9351] 6f 70 22 3e 29 3c 2f 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e 0a 3c 73 #> [9373] 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 63 6f 22 3e 23 #> [9395] 26 67 74 3b 20 26 6c 74 3b 68 74 74 72 32 5f 72 65 71 75 65 73 74 #> [9417] 26 67 74 3b 3c 2f 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e 0a 3c 73 70 #> [9439] 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 63 6f 22 3e 23 26 #> [9461] 67 74 3b 20 47 45 54 20 68 74 74 70 73 3a 2f 2f 72 2d 70 72 6f 6a #> [9483] 65 63 74 2e 6f 72 67 3c 2f 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e 0a #> [9505] 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 63 6f 22 #> [9527] 3e 23 26 67 74 3b 20 42 6f 64 79 3a 20 65 6d 70 74 79 3c 2f 73 70 #> [9549] 61 6e 3e 3c 2f 73 70 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 70 61 6e #> [9571] 20 63 6c 61 73 73 3d 22 63 6f 22 3e 23 26 67 74 3b 20 50 6f 6c 69 #> [9593] 63 69 65 73 3a 3c 2f 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e 0a 3c 73 #> [9615] 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 63 6f 22 3e 23 #> [9637] 26 67 74 3b 20 e2 80 a2 20 72 65 74 72 79 5f 6d 61 78 5f 74 72 69 #> [9659] 65 73 3a 20 35 3c 2f 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e 0a 3c 73 #> [9681] 70 61 6e 3e 3c 2f 73 70 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 70 61 #> [9703] 6e 20 63 6c 61 73 73 3d 22 63 6f 22 3e 23 20 43 68 61 6e 67 65 20 #> [9725] 74 68 65 20 48 54 54 50 20 6d 65 74 68 6f 64 3c 2f 73 70 61 6e 3e #> [9747] 3c 2f 73 70 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c #> [9769] 61 73 73 3d 22 76 61 22 3e 72 65 71 3c 2f 73 70 61 6e 3e 20 3c 73 #> [9791] 70 61 6e 20 63 6c 61 73 73 3d 22 6f 70 22 3e 7c 26 67 74 3b 3c 2f #> [9813] 73 70 61 6e 3e 20 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 66 75 22 #> [9835] 3e 3c 61 20 68 72 65 66 3d 22 72 65 66 65 72 65 6e 63 65 2f 72 65 #> [9857] 71 5f 6d 65 74 68 6f 64 2e 68 74 6d 6c 22 3e 72 65 71 5f 6d 65 74 #> [9879] 68 6f 64 3c 2f 61 3e 3c 2f 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c #> [9901] 61 73 73 3d 22 6f 70 22 3e 28 3c 2f 73 70 61 6e 3e 3c 73 70 61 6e #> [9923] 20 63 6c 61 73 73 3d 22 73 74 22 3e 22 50 41 54 43 48 22 3c 2f 73 #> [9945] 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 6f 70 22 3e 29 #> [9967] 3c 2f 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e 0a 3c 73 70 61 6e 3e 3c #> [9989] 73 70 61 6e 20 63 6c 61 73 73 3d 22 63 6f 22 3e 23 26 67 74 3b 20 #> [10011] 26 6c 74 3b 68 74 74 72 32 5f 72 65 71 75 65 73 74 26 67 74 3b 3c #> [10033] 2f 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 #> [10055] 70 61 6e 20 63 6c 61 73 73 3d 22 63 6f 22 3e 23 26 67 74 3b 20 50 #> [10077] 41 54 43 48 20 68 74 74 70 73 3a 2f 2f 72 2d 70 72 6f 6a 65 63 74 #> [10099] 2e 6f 72 67 3c 2f 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e 0a 3c 73 70 #> [10121] 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 63 6f 22 3e 23 26 #> [10143] 67 74 3b 20 42 6f 64 79 3a 20 65 6d 70 74 79 3c 2f 73 70 61 6e 3e #> [10165] 3c 2f 73 70 61 6e 3e 3c 2f 63 6f 64 65 3e 3c 2f 70 72 65 3e 3c 2f #> [10187] 64 69 76 3e 0a 3c 70 3e 41 6e 64 20 73 65 65 20 65 78 61 63 74 6c #> [10209] 79 20 77 68 61 74 20 68 74 74 72 32 20 77 69 6c 6c 20 73 65 6e 64 #> [10231] 20 74 6f 20 74 68 65 20 73 65 72 76 65 72 20 77 69 74 68 20 3c 63 #> [10253] 6f 64 65 3e 3c 61 20 68 72 65 66 3d 22 72 65 66 65 72 65 6e 63 65 #> [10275] 2f 72 65 71 5f 64 72 79 5f 72 75 6e 2e 68 74 6d 6c 22 3e 72 65 71 #> [10297] 5f 64 72 79 5f 72 75 6e 28 29 3c 2f 61 3e 3c 2f 63 6f 64 65 3e 3a #> [10319] 3c 2f 70 3e 0a 3c 64 69 76 20 63 6c 61 73 73 3d 22 73 6f 75 72 63 #> [10341] 65 43 6f 64 65 22 20 69 64 3d 22 63 62 34 22 3e 3c 70 72 65 20 63 #> [10363] 6c 61 73 73 3d 22 64 6f 77 6e 6c 69 74 20 73 6f 75 72 63 65 43 6f #> [10385] 64 65 20 72 22 3e 0a 3c 63 6f 64 65 20 63 6c 61 73 73 3d 22 73 6f #> [10407] 75 72 63 65 43 6f 64 65 20 52 22 3e 3c 73 70 61 6e 3e 3c 73 70 61 #> [10429] 6e 20 63 6c 61 73 73 3d 22 76 61 22 3e 72 65 71 3c 2f 73 70 61 6e #> [10451] 3e 20 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 6f 70 22 3e 7c 26 67 #> [10473] 74 3b 3c 2f 73 70 61 6e 3e 20 3c 73 70 61 6e 20 63 6c 61 73 73 3d #> [10495] 22 66 75 22 3e 3c 61 20 68 72 65 66 3d 22 72 65 66 65 72 65 6e 63 #> [10517] 65 2f 72 65 71 5f 64 72 79 5f 72 75 6e 2e 68 74 6d 6c 22 3e 72 65 #> [10539] 71 5f 64 72 79 5f 72 75 6e 3c 2f 61 3e 3c 2f 73 70 61 6e 3e 3c 73 #> [10561] 70 61 6e 20 63 6c 61 73 73 3d 22 6f 70 22 3e 28 3c 2f 73 70 61 6e #> [10583] 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 6f 70 22 3e 29 3c 2f 73 #> [10605] 70 61 6e 3e 3c 2f 73 70 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 70 61 #> [10627] 6e 20 63 6c 61 73 73 3d 22 63 6f 22 3e 23 26 67 74 3b 20 47 45 54 #> [10649] 20 2f 20 48 54 54 50 2f 31 2e 31 3c 2f 73 70 61 6e 3e 3c 2f 73 70 #> [10671] 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d #> [10693] 22 63 6f 22 3e 23 26 67 74 3b 20 48 6f 73 74 3a 20 72 2d 70 72 6f #> [10715] 6a 65 63 74 2e 6f 72 67 3c 2f 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e #> [10737] 0a 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 63 6f #> [10759] 22 3e 23 26 67 74 3b 20 55 73 65 72 2d 41 67 65 6e 74 3a 20 68 74 #> [10781] 74 72 32 2f 31 2e 30 2e 32 2e 39 30 30 30 20 72 2d 63 75 72 6c 2f #> [10803] 35 2e 32 2e 31 20 6c 69 62 63 75 72 6c 2f 38 2e 36 2e 30 3c 2f 73 #> [10825] 70 61 6e 3e 3c 2f 73 70 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 70 61 #> [10847] 6e 20 63 6c 61 73 73 3d 22 63 6f 22 3e 23 26 67 74 3b 20 41 63 63 #> [10869] 65 70 74 3a 20 2a 2f 2a 3c 2f 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e #> [10891] 0a 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 63 6f #> [10913] 22 3e 23 26 67 74 3b 20 41 63 63 65 70 74 2d 45 6e 63 6f 64 69 6e #> [10935] 67 3a 20 64 65 66 6c 61 74 65 2c 20 67 7a 69 70 3c 2f 73 70 61 6e #> [10957] 3e 3c 2f 73 70 61 6e 3e 3c 2f 63 6f 64 65 3e 3c 2f 70 72 65 3e 3c #> [10979] 2f 64 69 76 3e 0a 3c 70 3e 55 73 65 20 3c 63 6f 64 65 3e 3c 61 20 #> [11001] 68 72 65 66 3d 22 72 65 66 65 72 65 6e 63 65 2f 72 65 71 5f 70 65 #> [11023] 72 66 6f 72 6d 2e 68 74 6d 6c 22 3e 72 65 71 5f 70 65 72 66 6f 72 #> [11045] 6d 28 29 3c 2f 61 3e 3c 2f 63 6f 64 65 3e 20 74 6f 20 70 65 72 66 #> [11067] 6f 72 6d 20 74 68 65 20 72 65 71 75 65 73 74 2c 20 72 65 74 72 69 #> [11089] 65 76 69 6e 67 20 61 20 3c 73 74 72 6f 6e 67 3e 72 65 73 70 6f 6e #> [11111] 73 65 3c 2f 73 74 72 6f 6e 67 3e 3a 3c 2f 70 3e 0a 3c 64 69 76 20 #> [11133] 63 6c 61 73 73 3d 22 73 6f 75 72 63 65 43 6f 64 65 22 20 69 64 3d #> [11155] 22 63 62 35 22 3e 3c 70 72 65 20 63 6c 61 73 73 3d 22 64 6f 77 6e #> [11177] 6c 69 74 20 73 6f 75 72 63 65 43 6f 64 65 20 72 22 3e 0a 3c 63 6f #> [11199] 64 65 20 63 6c 61 73 73 3d 22 73 6f 75 72 63 65 43 6f 64 65 20 52 #> [11221] 22 3e 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 76 #> [11243] 61 22 3e 72 65 73 70 3c 2f 73 70 61 6e 3e 20 3c 73 70 61 6e 20 63 #> [11265] 6c 61 73 73 3d 22 6f 70 22 3e 26 6c 74 3b 2d 3c 2f 73 70 61 6e 3e #> [11287] 20 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 66 75 22 3e 3c 61 20 68 #> [11309] 72 65 66 3d 22 72 65 66 65 72 65 6e 63 65 2f 72 65 71 5f 70 65 72 #> [11331] 66 6f 72 6d 2e 68 74 6d 6c 22 3e 72 65 71 5f 70 65 72 66 6f 72 6d #> [11353] 3c 2f 61 3e 3c 2f 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 #> [11375] 3d 22 6f 70 22 3e 28 3c 2f 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c #> [11397] 61 73 73 3d 22 76 61 22 3e 72 65 71 3c 2f 73 70 61 6e 3e 3c 73 70 #> [11419] 61 6e 20 63 6c 61 73 73 3d 22 6f 70 22 3e 29 3c 2f 73 70 61 6e 3e #> [11441] 3c 2f 73 70 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c #> [11463] 61 73 73 3d 22 76 61 22 3e 72 65 73 70 3c 2f 73 70 61 6e 3e 3c 2f #> [11485] 73 70 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 #> [11507] 73 3d 22 63 6f 22 3e 23 26 67 74 3b 20 26 6c 74 3b 68 74 74 72 32 #> [11529] 5f 72 65 73 70 6f 6e 73 65 26 67 74 3b 3c 2f 73 70 61 6e 3e 3c 2f #> [11551] 73 70 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 #> [11573] 73 3d 22 63 6f 22 3e 23 26 67 74 3b 20 47 45 54 20 68 74 74 70 73 #> [11595] 3a 2f 2f 77 77 77 2e 72 2d 70 72 6f 6a 65 63 74 2e 6f 72 67 2f 3c #> [11617] 2f 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 #> [11639] 70 61 6e 20 63 6c 61 73 73 3d 22 63 6f 22 3e 23 26 67 74 3b 20 53 #> [11661] 74 61 74 75 73 3a 20 32 30 30 20 4f 4b 3c 2f 73 70 61 6e 3e 3c 2f #> [11683] 73 70 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 #> [11705] 73 3d 22 63 6f 22 3e 23 26 67 74 3b 20 43 6f 6e 74 65 6e 74 2d 54 #> [11727] 79 70 65 3a 20 74 65 78 74 2f 68 74 6d 6c 3c 2f 73 70 61 6e 3e 3c #> [11749] 2f 73 70 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 #> [11771] 73 73 3d 22 63 6f 22 3e 23 26 67 74 3b 20 42 6f 64 79 3a 20 49 6e #> [11793] 20 6d 65 6d 6f 72 79 20 28 36 39 35 31 20 62 79 74 65 73 29 3c 2f #> [11815] 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e 3c 2f 63 6f 64 65 3e 3c 2f 70 #> [11837] 72 65 3e 3c 2f 64 69 76 3e 0a 3c 70 3e 54 68 65 20 3c 63 6f 64 65 #> [11859] 3e 72 65 73 70 5f 3c 2f 63 6f 64 65 3e 20 66 75 6e 63 74 69 6f 6e #> [11881] 73 20 68 65 6c 70 20 79 6f 75 20 65 78 74 72 61 63 74 20 76 61 72 #> [11903] 69 6f 75 73 20 75 73 65 66 75 6c 20 63 6f 6d 70 6f 6e 65 6e 74 73 #> [11925] 20 6f 66 20 74 68 65 20 72 65 73 70 6f 6e 73 65 3a 3c 2f 70 3e 0a #> [11947] 3c 64 69 76 20 63 6c 61 73 73 3d 22 73 6f 75 72 63 65 43 6f 64 65 #> [11969] 22 20 69 64 3d 22 63 62 36 22 3e 3c 70 72 65 20 63 6c 61 73 73 3d #> [11991] 22 64 6f 77 6e 6c 69 74 20 73 6f 75 72 63 65 43 6f 64 65 20 72 22 #> [12013] 3e 0a 3c 63 6f 64 65 20 63 6c 61 73 73 3d 22 73 6f 75 72 63 65 43 #> [12035] 6f 64 65 20 52 22 3e 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 #> [12057] 73 73 3d 22 76 61 22 3e 72 65 73 70 3c 2f 73 70 61 6e 3e 20 3c 73 #> [12079] 70 61 6e 20 63 6c 61 73 73 3d 22 6f 70 22 3e 7c 26 67 74 3b 3c 2f #> [12101] 73 70 61 6e 3e 20 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 66 75 22 #> [12123] 3e 3c 61 20 68 72 65 66 3d 22 72 65 66 65 72 65 6e 63 65 2f 72 65 #> [12145] 73 70 5f 63 6f 6e 74 65 6e 74 5f 74 79 70 65 2e 68 74 6d 6c 22 3e #> [12167] 72 65 73 70 5f 63 6f 6e 74 65 6e 74 5f 74 79 70 65 3c 2f 61 3e 3c #> [12189] 2f 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 6f 70 22 #> [12211] 3e 28 3c 2f 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 #> [12233] 6f 70 22 3e 29 3c 2f 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e 0a 3c 73 #> [12255] 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 63 6f 22 3e 23 #> [12277] 26 67 74 3b 20 5b 31 5d 20 22 74 65 78 74 2f 68 74 6d 6c 22 3c 2f #> [12299] 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 70 #> [12321] 61 6e 20 63 6c 61 73 73 3d 22 76 61 22 3e 72 65 73 70 3c 2f 73 70 #> [12343] 61 6e 3e 20 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 6f 70 22 3e 7c #> [12365] 26 67 74 3b 3c 2f 73 70 61 6e 3e 20 3c 73 70 61 6e 20 63 6c 61 73 #> [12387] 73 3d 22 66 75 22 3e 3c 61 20 68 72 65 66 3d 22 72 65 66 65 72 65 #> [12409] 6e 63 65 2f 72 65 73 70 5f 73 74 61 74 75 73 2e 68 74 6d 6c 22 3e #> [12431] 72 65 73 70 5f 73 74 61 74 75 73 5f 64 65 73 63 3c 2f 61 3e 3c 2f #> [12453] 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 6f 70 22 3e #> [12475] 28 3c 2f 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 6f #> [12497] 70 22 3e 29 3c 2f 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e 0a 3c 73 70 #> [12519] 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 63 6f 22 3e 23 26 #> [12541] 67 74 3b 20 5b 31 5d 20 22 4f 4b 22 3c 2f 73 70 61 6e 3e 3c 2f 73 #> [12563] 70 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 #> [12585] 3d 22 76 61 22 3e 72 65 73 70 3c 2f 73 70 61 6e 3e 20 3c 73 70 61 #> [12607] 6e 20 63 6c 61 73 73 3d 22 6f 70 22 3e 7c 26 67 74 3b 3c 2f 73 70 #> [12629] 61 6e 3e 20 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 66 75 22 3e 3c #> [12651] 61 20 68 72 65 66 3d 22 72 65 66 65 72 65 6e 63 65 2f 72 65 73 70 #> [12673] 5f 62 6f 64 79 5f 72 61 77 2e 68 74 6d 6c 22 3e 72 65 73 70 5f 62 #> [12695] 6f 64 79 5f 68 74 6d 6c 3c 2f 61 3e 3c 2f 73 70 61 6e 3e 3c 73 70 #> [12717] 61 6e 20 63 6c 61 73 73 3d 22 6f 70 22 3e 28 3c 2f 73 70 61 6e 3e #> [12739] 3c 73 70 61 6e 20 63 6c 61 73 73 3d 22 6f 70 22 3e 29 3c 2f 73 70 #> [12761] 61 6e 3e 3c 2f 73 70 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 70 61 6e #> [12783] 20 63 6c 61 73 73 3d 22 63 6f 22 3e 23 26 67 74 3b 20 7b 68 74 6d #> [12805] 6c 5f 64 6f 63 75 6d 65 6e 74 7d 3c 2f 73 70 61 6e 3e 3c 2f 73 70 #> [12827] 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d #> [12849] 22 63 6f 22 3e 23 26 67 74 3b 20 26 6c 74 3b 68 74 6d 6c 20 6c 61 #> [12871] 6e 67 3d 22 65 6e 22 26 67 74 3b 3c 2f 73 70 61 6e 3e 3c 2f 73 70 #> [12893] 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 73 3d #> [12915] 22 63 6f 22 3e 23 26 67 74 3b 20 5b 31 5d 20 26 6c 74 3b 68 65 61 #> [12937] 64 26 67 74 3b 5c 6e 26 6c 74 3b 6d 65 74 61 20 68 74 74 70 2d 65 #> [12959] 71 75 69 76 3d 22 43 6f 6e 74 65 6e 74 2d 54 79 70 65 22 20 63 6f #> [12981] 6e 74 65 6e 74 3d 22 74 65 78 74 2f 68 74 6d 6c 3b 20 63 68 61 72 #> [13003] 73 65 74 3d 55 54 46 2d 38 20 2e 2e 2e 3c 2f 73 70 61 6e 3e 3c 2f #> [13025] 73 70 61 6e 3e 0a 3c 73 70 61 6e 3e 3c 73 70 61 6e 20 63 6c 61 73 #> [13047] 73 3d 22 63 6f 22 3e 23 26 67 74 3b 20 5b 32 5d 20 26 6c 74 3b 62 #> [13069] 6f 64 79 26 67 74 3b 5c 6e 20 20 20 20 26 6c 74 3b 64 69 76 20 63 #> [13091] 6c 61 73 73 3d 22 63 6f 6e 74 61 69 6e 65 72 20 70 61 67 65 22 26 #> [13113] 67 74 3b 5c 6e 20 20 20 20 20 20 26 6c 74 3b 64 69 76 20 63 6c 61 #> [13135] 73 73 3d 22 72 6f 77 22 26 67 74 3b 5c 6e 20 20 20 20 20 20 20 2e #> [13157] 2e 2e 3c 2f 73 70 61 6e 3e 3c 2f 73 70 61 6e 3e 3c 2f 63 6f 64 65 #> [13179] 3e 3c 2f 70 72 65 3e 3c 2f 64 69 76 3e 0a 3c 2f 64 69 76 3e 0a 3c #> [13201] 64 69 76 20 63 6c 61 73 73 3d 22 73 65 63 74 69 6f 6e 20 6c 65 76 #> [13223] 65 6c 32 22 3e 0a 3c 68 32 20 69 64 3d 22 6d 61 6a 6f 72 2d 64 69 #> [13245] 66 66 65 72 65 6e 63 65 73 2d 74 6f 2d 68 74 74 72 22 3e 4d 61 6a #> [13267] 6f 72 20 64 69 66 66 65 72 65 6e 63 65 73 20 74 6f 20 68 74 74 72 #> [13289] 3c 61 20 63 6c 61 73 73 3d 22 61 6e 63 68 6f 72 22 20 61 72 69 61 #> [13311] 2d 6c 61 62 65 6c 3d 22 61 6e 63 68 6f 72 22 20 68 72 65 66 3d 22 #> [13333] 23 6d 61 6a 6f 72 2d 64 69 66 66 65 72 65 6e 63 65 73 2d 74 6f 2d #> [13355] 68 74 74 72 22 3e 3c 2f 61 3e 0a 3c 2f 68 32 3e 0a 3c 75 6c 3e 0a #> [13377] 3c 6c 69 3e 3c 70 3e 59 6f 75 20 63 61 6e 20 6e 6f 77 20 63 72 65 #> [13399] 61 74 65 20 61 6e 64 20 6d 6f 64 69 66 79 20 61 20 72 65 71 75 65 #> [13421] 73 74 20 77 69 74 68 6f 75 74 20 70 65 72 66 6f 72 6d 69 6e 67 20 #> [13443] 69 74 2e 20 54 68 69 73 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 #> [13465] 65 72 65 e2 80 99 73 20 6e 6f 77 20 61 20 73 69 6e 67 6c 65 20 66 #> [13487] 75 6e 63 74 69 6f 6e 20 74 6f 20 70 65 72 66 6f 72 6d 20 74 68 65 #> [13509] 20 72 65 71 75 65 73 74 20 61 6e 64 20 66 65 74 63 68 20 74 68 65 #> [13531] 20 72 65 73 75 6c 74 3a 20 3c 63 6f 64 65 3e 3c 61 20 68 72 65 66 #> [13553] 3d 22 72 65 66 65 72 65 6e 63 65 2f 72 65 71 5f 70 65 72 66 6f 72 #> [13575] 6d 2e 68 74 6d 6c 22 3e 72 65 71 5f 70 65 72 66 6f 72 6d 28 29 3c #> [13597] 2f 61 3e 3c 2f 63 6f 64 65 3e 2e 20 3c 63 6f 64 65 3e 3c 61 20 68 #> [13619] 72 65 66 3d 22 72 65 66 65 72 65 6e 63 65 2f 72 65 71 5f 70 65 72 #> [13641] 66 6f 72 6d 2e 68 74 6d 6c 22 3e 72 65 71 5f 70 65 72 66 6f 72 6d #> [13663] 28 29 3c 2f 61 3e 3c 2f 63 6f 64 65 3e 20 72 65 70 6c 61 63 65 73 #> [13685] 20 3c 63 6f 64 65 3e 3c 61 20 68 72 65 66 3d 22 68 74 74 70 73 3a #> [13707] 2f 2f 68 74 74 72 2e 72 2d 6c 69 62 2e 6f 72 67 2f 72 65 66 65 72 #> [13729] 65 6e 63 65 2f 47 45 54 2e 68 74 6d 6c 22 20 63 6c 61 73 73 3d 22 #> [13751] 65 78 74 65 72 6e 61 6c 2d 6c 69 6e 6b 22 3e 68 74 74 72 3a 3a 47 #> [13773] 45 54 28 29 3c 2f 61 3e 3c 2f 63 6f 64 65 3e 2c 20 3c 63 6f 64 65 #> [13795] 3e 3c 61 20 68 72 65 66 3d 22 68 74 74 70 73 3a 2f 2f 68 74 74 72 #> [13817] 2e 72 2d 6c 69 62 2e 6f 72 67 2f 72 65 66 65 72 65 6e 63 65 2f 50 #> [13839] 4f 53 54 2e 68 74 6d 6c 22 20 63 6c 61 73 73 3d 22 65 78 74 65 72 #> [13861] 6e 61 6c 2d 6c 69 6e 6b 22 3e 68 74 74 72 3a 3a 50 4f 53 54 28 29 #> [13883] 3c 2f 61 3e 3c 2f 63 6f 64 65 3e 2c 20 3c 63 6f 64 65 3e 3c 61 20 #> [13905] 68 72 65 66 3d 22 68 74 74 70 73 3a 2f 2f 68 74 74 72 2e 72 2d 6c #> [13927] 69 62 2e 6f 72 67 2f 72 65 66 65 72 65 6e 63 65 2f 44 45 4c 45 54 #> [13949] 45 2e 68 74 6d 6c 22 20 63 6c 61 73 73 3d 22 65 78 74 65 72 6e 61 #> [13971] 6c 2d 6c 69 6e 6b 22 3e 68 74 74 72 3a 3a 44 45 4c 45 54 45 28 29 #> [13993] 3c 2f 61 3e 3c 2f 63 6f 64 65 3e 2c 20 61 6e 64 20 6d 6f 72 65 2e #> [14015] 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 3c 70 3e 48 54 54 50 20 #> [14037] 65 72 72 6f 72 73 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c #> [14059] 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 52 20 65 72 #> [14081] 72 6f 72 73 2e 20 55 73 65 20 3c 63 6f 64 65 3e 3c 61 20 68 72 65 #> [14103] 66 3d 22 72 65 66 65 72 65 6e 63 65 2f 72 65 71 5f 65 72 72 6f 72 #> [14125] 2e 68 74 6d 6c 22 3e 72 65 71 5f 65 72 72 6f 72 28 29 3c 2f 61 3e #> [14147] 3c 2f 63 6f 64 65 3e 20 74 6f 20 6f 76 65 72 72 69 64 65 20 74 68 #> [14169] 65 20 64 65 66 61 75 6c 74 73 20 28 77 68 69 63 68 20 74 75 72 6e #> [14191] 20 61 6c 6c 20 34 78 78 20 61 6e 64 20 35 78 78 20 72 65 73 70 6f #> [14213] 6e 73 65 73 20 69 6e 74 6f 20 65 72 72 6f 72 73 29 20 6f 72 20 74 #> [14235] 6f 20 61 64 64 20 61 64 64 69 74 69 6f 6e 61 6c 20 64 65 74 61 69 #> [14257] 6c 73 20 74 6f 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 #> [14279] 65 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 3c 70 3e 59 6f 75 #> [14301] 20 63 61 6e 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 72 65 74 #> [14323] 72 79 20 69 66 20 74 68 65 20 72 65 71 75 65 73 74 20 66 61 69 6c #> [14345] 73 20 6f 72 20 65 6e 63 6f 75 6e 74 65 72 73 20 61 20 74 72 61 6e #> [14367] 73 69 65 6e 74 20 48 54 54 50 20 65 72 72 6f 72 20 28 65 2e 67 2e #> [14389] c2 a0 61 20 34 32 39 20 72 61 74 65 20 6c 69 6d 69 74 20 72 65 71 #> [14411] 75 65 73 74 29 2e 20 3c 63 6f 64 65 3e 3c 61 20 68 72 65 66 3d 22 #> [14433] 72 65 66 65 72 65 6e 63 65 2f 72 65 71 5f 72 65 74 72 79 2e 68 74 #> [14455] 6d 6c 22 3e 72 65 71 5f 72 65 74 72 79 28 29 3c 2f 61 3e 3c 2f 63 #> [14477] 6f 64 65 3e 20 64 65 66 69 6e 65 73 20 74 68 65 20 6d 61 78 69 6d #> [14499] 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 74 72 69 65 73 2c 20 #> [14521] 77 68 69 63 68 20 65 72 72 6f 72 73 20 61 72 65 20 74 72 61 6e 73 #> [14543] 69 65 6e 74 2c 20 61 6e 64 20 68 6f 77 20 6c 6f 6e 67 20 74 6f 20 #> [14565] 77 61 69 74 20 62 65 74 77 65 65 6e 20 74 72 69 65 73 2e 3c 2f 70 #> [14587] 3e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 3c 70 3e 4f 41 75 74 68 20 73 75 #> [14609] 70 70 6f 72 74 20 68 61 73 20 62 65 65 6e 20 74 6f 74 61 6c 6c 79 #> [14631] 20 6f 76 65 72 68 61 75 6c 65 64 20 74 6f 20 64 69 72 65 63 74 6c #> [14653] 79 20 73 75 70 70 6f 72 74 20 6d 61 6e 79 20 6d 6f 72 65 20 66 6c #> [14675] 6f 77 73 20 61 6e 64 20 74 6f 20 6d 61 6b 65 20 69 74 20 6d 75 63 #> [14697] 68 20 65 61 73 69 65 72 20 74 6f 20 62 6f 74 68 20 63 75 73 74 6f #> [14719] 6d 69 73 65 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 66 6c 6f 77 #> [14741] 73 20 61 6e 64 20 74 6f 20 63 72 65 61 74 65 20 79 6f 75 72 20 6f #> [14763] 77 6e 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 3c 70 3e 59 6f #> [14785] 75 20 63 61 6e 20 6d 61 6e 61 67 65 20 73 65 63 72 65 74 73 20 28 #> [14807] 6f 66 74 65 6e 20 6e 65 65 64 65 64 20 66 6f 72 20 74 65 73 74 69 #> [14829] 6e 67 29 20 77 69 74 68 20 3c 63 6f 64 65 3e 3c 61 20 68 72 65 66 #> [14851] 3d 22 72 65 66 65 72 65 6e 63 65 2f 73 65 63 72 65 74 73 2e 68 74 #> [14873] 6d 6c 22 3e 73 65 63 72 65 74 5f 65 6e 63 72 79 70 74 28 29 3c 2f #> [14895] 61 3e 3c 2f 63 6f 64 65 3e 20 61 6e 64 20 66 72 69 65 6e 64 73 2e #> [14917] 20 59 6f 75 20 63 61 6e 20 6f 62 66 75 73 63 61 74 65 20 6d 69 6c #> [14939] 64 6c 79 20 63 6f 6e 66 69 64 65 6e 74 69 61 6c 20 64 61 74 61 20 #> [14961] 77 69 74 68 20 3c 63 6f 64 65 3e 3c 61 20 68 72 65 66 3d 22 72 65 #> [14983] 66 65 72 65 6e 63 65 2f 6f 62 66 75 73 63 61 74 65 2e 68 74 6d 6c #> [15005] 22 3e 6f 62 66 75 73 63 61 74 65 28 29 3c 2f 61 3e 3c 2f 63 6f 64 #> [15027] 65 3e 2c 20 70 72 65 76 65 6e 74 69 6e 67 20 69 74 20 66 72 6f 6d #> [15049] 20 62 65 69 6e 67 20 73 63 72 61 70 65 64 20 66 72 6f 6d 20 70 75 #> [15071] 62 6c 69 73 68 65 64 20 63 6f 64 65 2e 3c 2f 70 3e 3c 2f 6c 69 3e #> [15093] 0a 3c 6c 69 3e 3c 70 3e 59 6f 75 20 63 61 6e 20 61 75 74 6f 6d 61 #> [15115] 74 69 63 61 6c 6c 79 20 63 61 63 68 65 20 61 6c 6c 20 63 61 63 68 #> [15137] 65 61 62 6c 65 20 72 65 73 75 6c 74 73 20 77 69 74 68 20 3c 63 6f #> [15159] 64 65 3e 3c 61 20 68 72 65 66 3d 22 72 65 66 65 72 65 6e 63 65 2f #> [15181] 72 65 71 5f 63 61 63 68 65 2e 68 74 6d 6c 22 3e 72 65 71 5f 63 61 #> [15203] 63 68 65 28 29 3c 2f 61 3e 3c 2f 63 6f 64 65 3e 2e 20 52 65 6c 61 #> [15225] 74 69 76 65 6c 79 20 66 65 77 20 41 50 49 20 72 65 73 70 6f 6e 73 #> [15247] 65 73 20 61 72 65 20 63 61 63 68 65 61 62 6c 65 2c 20 62 75 74 20 #> [15269] 77 68 65 6e 20 74 68 65 79 20 61 72 65 20 69 74 20 74 79 70 69 63 #> [15291] 61 6c 6c 79 20 6d 61 6b 65 73 20 61 20 62 69 67 20 64 69 66 66 65 #> [15313] 72 65 6e 63 65 2e 3c 2f 70 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a #> [15335] 3c 2f 64 69 76 3e 0a 3c 64 69 76 20 63 6c 61 73 73 3d 22 73 65 63 #> [15357] 74 69 6f 6e 20 6c 65 76 65 6c 32 22 3e 0a 3c 68 32 20 69 64 3d 22 #> [15379] 61 63 6b 6e 6f 77 6c 65 64 67 65 6d 65 6e 74 73 22 3e 41 63 6b 6e #> [15401] 6f 77 6c 65 64 67 65 6d 65 6e 74 73 3c 61 20 63 6c 61 73 73 3d 22 #> [15423] 61 6e 63 68 6f 72 22 20 61 72 69 61 2d 6c 61 62 65 6c 3d 22 61 6e #> [15445] 63 68 6f 72 22 20 68 72 65 66 3d 22 23 61 63 6b 6e 6f 77 6c 65 64 #> [15467] 67 65 6d 65 6e 74 73 22 3e 3c 2f 61 3e 0a 3c 2f 68 32 3e 0a 3c 70 #> [15489] 3e 68 74 74 72 32 20 77 6f 75 6c 64 6e e2 80 99 74 20 62 65 20 70 #> [15511] 6f 73 73 69 62 6c 65 20 77 69 74 68 6f 75 74 20 3c 61 20 68 72 65 #> [15533] 66 3d 22 68 74 74 70 73 3a 2f 2f 6a 65 72 6f 65 6e 2e 63 72 61 6e #> [15555] 2e 64 65 76 2f 63 75 72 6c 2f 22 20 63 6c 61 73 73 3d 22 65 78 74 #> [15577] 65 72 6e 61 6c 2d 6c 69 6e 6b 22 3e 63 75 72 6c 3c 2f 61 3e 2c 20 #> [15599] 3c 61 20 68 72 65 66 3d 22 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 #> [15621] 62 2e 63 6f 6d 2f 6a 65 72 6f 65 6e 2f 6f 70 65 6e 73 73 6c 2f 22 #> [15643] 20 63 6c 61 73 73 3d 22 65 78 74 65 72 6e 61 6c 2d 6c 69 6e 6b 22 #> [15665] 3e 6f 70 65 6e 73 73 6c 3c 2f 61 3e 2c 20 3c 61 20 68 72 65 66 3d #> [15687] 22 68 74 74 70 73 3a 2f 2f 6a 65 72 6f 65 6e 2e 63 72 61 6e 2e 64 #> [15709] 65 76 2f 6a 73 6f 6e 6c 69 74 65 2f 22 20 63 6c 61 73 73 3d 22 65 #> [15731] 78 74 65 72 6e 61 6c 2d 6c 69 6e 6b 22 3e 6a 73 6f 6e 6c 69 74 65 #> [15753] 3c 2f 61 3e 2c 20 61 6e 64 20 3c 61 20 68 72 65 66 3d 22 68 74 74 #> [15775] 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 72 2d 6c 69 62 2f #> [15797] 6a 6f 73 65 2f 22 20 63 6c 61 73 73 3d 22 65 78 74 65 72 6e 61 6c #> [15819] 2d 6c 69 6e 6b 22 3e 6a 6f 73 65 3c 2f 61 3e 2c 20 77 68 69 63 68 #> [15841] 20 61 72 65 20 61 6c 6c 20 6d 61 69 6e 74 61 69 6e 65 64 20 62 79 #> [15863] 20 3c 61 20 68 72 65 66 3d 22 68 74 74 70 73 3a 2f 2f 67 69 74 68 #> [15885] 75 62 2e 63 6f 6d 2f 6a 65 72 6f 65 6e 22 20 63 6c 61 73 73 3d 22 #> [15907] 65 78 74 65 72 6e 61 6c 2d 6c 69 6e 6b 22 3e 4a 65 72 6f 65 6e 20 #> [15929] 4f 6f 6d 73 3c 2f 61 3e 2e 20 41 20 62 69 67 20 74 68 61 6e 6b 73 #> [15951] 20 61 6c 73 6f 20 67 6f 20 74 6f 20 3c 61 20 68 72 65 66 3d 22 68 #> [15973] 74 74 70 73 3a 2f 2f 6a 65 6e 6e 79 62 72 79 61 6e 2e 6f 72 67 22 #> [15995] 20 63 6c 61 73 73 3d 22 65 78 74 65 72 6e 61 6c 2d 6c 69 6e 6b 22 #> [16017] 3e 4a 65 6e 6e 79 20 42 72 79 61 6e 3c 2f 61 3e 20 61 6e 64 20 3c #> [16039] 61 20 68 72 65 66 3d 22 68 74 74 70 73 3a 2f 2f 77 77 77 2e 63 72 #> [16061] 61 69 67 63 69 74 72 6f 2e 6f 72 67 22 20 63 6c 61 73 73 3d 22 65 #> [16083] 78 74 65 72 6e 61 6c 2d 6c 69 6e 6b 22 3e 43 72 61 69 67 20 43 69 #> [16105] 74 72 6f 3c 2f 61 3e 20 77 68 6f 20 68 61 76 65 20 67 69 76 65 6e #> [16127] 20 6d 65 20 6d 75 63 68 20 75 73 65 66 75 6c 20 66 65 65 64 62 61 #> [16149] 63 6b 20 6f 6e 20 62 6f 74 68 20 74 68 65 20 64 65 73 69 67 6e 20 #> [16171] 6f 66 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 73 20 61 6e 64 20 74 #> [16193] 68 65 20 75 73 65 72 20 66 61 63 69 6e 67 20 41 50 49 2e 3c 2f 70 #> [16215] 3e 0a 3c 2f 64 69 76 3e 0a 3c 2f 64 69 76 3e 0a 20 20 3c 2f 6d 61 #> [16237] 69 6e 3e 3c 61 73 69 64 65 20 63 6c 61 73 73 3d 22 63 6f 6c 2d 6d #> [16259] 64 2d 33 22 3e 3c 64 69 76 20 63 6c 61 73 73 3d 22 6c 69 6e 6b 73 #> [16281] 22 3e 0a 3c 68 32 20 64 61 74 61 2d 74 6f 63 2d 73 6b 69 70 3e 4c #> [16303] 69 6e 6b 73 3c 2f 68 32 3e 0a 3c 75 6c 20 63 6c 61 73 73 3d 22 6c #> [16325] 69 73 74 2d 75 6e 73 74 79 6c 65 64 22 3e 0a 3c 6c 69 3e 3c 61 20 #> [16347] 68 72 65 66 3d 22 68 74 74 70 73 3a 2f 2f 63 6c 6f 75 64 2e 72 2d #> [16369] 70 72 6f 6a 65 63 74 2e 6f 72 67 2f 70 61 63 6b 61 67 65 3d 68 74 #> [16391] 74 72 32 22 20 63 6c 61 73 73 3d 22 65 78 74 65 72 6e 61 6c 2d 6c #> [16413] 69 6e 6b 22 3e 56 69 65 77 20 6f 6e 20 43 52 41 4e 3c 2f 61 3e 3c #> [16435] 2f 6c 69 3e 0a 3c 6c 69 3e 3c 61 20 68 72 65 66 3d 22 68 74 74 70 #> [16457] 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f 72 2d 6c 69 62 2f 68 #> [16479] 74 74 72 32 2f 22 20 63 6c 61 73 73 3d 22 65 78 74 65 72 6e 61 6c #> [16501] 2d 6c 69 6e 6b 22 3e 42 72 6f 77 73 65 20 73 6f 75 72 63 65 20 63 #> [16523] 6f 64 65 3c 2f 61 3e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 3c 61 20 68 72 #> [16545] 65 66 3d 22 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d #> [16567] 2f 72 2d 6c 69 62 2f 68 74 74 72 32 2f 69 73 73 75 65 73 22 20 63 #> [16589] 6c 61 73 73 3d 22 65 78 74 65 72 6e 61 6c 2d 6c 69 6e 6b 22 3e 52 #> [16611] 65 70 6f 72 74 20 61 20 62 75 67 3c 2f 61 3e 3c 2f 6c 69 3e 0a 3c #> [16633] 2f 75 6c 3e 0a 3c 2f 64 69 76 3e 0a 0a 3c 64 69 76 20 63 6c 61 73 #> [16655] 73 3d 22 6c 69 63 65 6e 73 65 22 3e 0a 3c 68 32 20 64 61 74 61 2d #> [16677] 74 6f 63 2d 73 6b 69 70 3e 4c 69 63 65 6e 73 65 3c 2f 68 32 3e 0a #> [16699] 3c 75 6c 20 63 6c 61 73 73 3d 22 6c 69 73 74 2d 75 6e 73 74 79 6c #> [16721] 65 64 22 3e 0a 3c 6c 69 3e 3c 61 20 68 72 65 66 3d 22 4c 49 43 45 #> [16743] 4e 53 45 2e 68 74 6d 6c 22 3e 46 75 6c 6c 20 6c 69 63 65 6e 73 65 #> [16765] 3c 2f 61 3e 3c 2f 6c 69 3e 0a 3c 6c 69 3e 3c 73 6d 61 6c 6c 3e 3c #> [16787] 61 20 68 72 65 66 3d 22 68 74 74 70 73 3a 2f 2f 6f 70 65 6e 73 6f #> [16809] 75 72 63 65 2e 6f 72 67 2f 6c 69 63 65 6e 73 65 73 2f 6d 69 74 2d #> [16831] 6c 69 63 65 6e 73 65 2e 70 68 70 22 20 63 6c 61 73 73 3d 22 65 78 #> [16853] 74 65 72 6e 61 6c 2d 6c 69 6e 6b 22 3e 4d 49 54 3c 2f 61 3e 20 2b #> [16875] 20 66 69 6c 65 20 3c 61 20 68 72 65 66 3d 22 4c 49 43 45 4e 53 45 #> [16897] 2d 74 65 78 74 2e 68 74 6d 6c 22 3e 4c 49 43 45 4e 53 45 3c 2f 61 #> [16919] 3e 3c 2f 73 6d 61 6c 6c 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a 3c #> [16941] 2f 64 69 76 3e 0a 0a 0a 3c 64 69 76 20 63 6c 61 73 73 3d 22 63 69 #> [16963] 74 61 74 69 6f 6e 22 3e 0a 3c 68 32 20 64 61 74 61 2d 74 6f 63 2d #> [16985] 73 6b 69 70 3e 43 69 74 61 74 69 6f 6e 3c 2f 68 32 3e 0a 3c 75 6c #> [17007] 20 63 6c 61 73 73 3d 22 6c 69 73 74 2d 75 6e 73 74 79 6c 65 64 22 #> [17029] 3e 0a 3c 6c 69 3e 3c 61 20 68 72 65 66 3d 22 61 75 74 68 6f 72 73 #> [17051] 2e 68 74 6d 6c 23 63 69 74 61 74 69 6f 6e 22 3e 43 69 74 69 6e 67 #> [17073] 20 68 74 74 72 32 3c 2f 61 3e 3c 2f 6c 69 3e 0a 3c 2f 75 6c 3e 0a #> [17095] 3c 2f 64 69 76 3e 0a 0a 3c 64 69 76 20 63 6c 61 73 73 3d 22 64 65 #> [17117] 76 65 6c 6f 70 65 72 73 22 3e 0a 3c 68 32 20 64 61 74 61 2d 74 6f #> [17139] 63 2d 73 6b 69 70 3e 44 65 76 65 6c 6f 70 65 72 73 3c 2f 68 32 3e #> [17161] 0a 3c 75 6c 20 63 6c 61 73 73 3d 22 6c 69 73 74 2d 75 6e 73 74 79 #> [17183] 6c 65 64 22 3e 0a 3c 6c 69 3e 0a 3c 61 20 68 72 65 66 3d 22 68 74 #> [17205] 74 70 73 3a 2f 2f 68 61 64 6c 65 79 2e 6e 7a 22 20 63 6c 61 73 73 #> [17227] 3d 22 65 78 74 65 72 6e 61 6c 2d 6c 69 6e 6b 22 3e 48 61 64 6c 65 #> [17249] 79 20 57 69 63 6b 68 61 6d 3c 2f 61 3e 20 3c 62 72 3e 3c 73 6d 61 #> [17271] 6c 6c 20 63 6c 61 73 73 3d 22 72 6f 6c 65 73 22 3e 20 41 75 74 68 #> [17293] 6f 72 2c 20 6d 61 69 6e 74 61 69 6e 65 72 20 3c 2f 73 6d 61 6c 6c #> [17315] 3e 20 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 0a 3c 61 20 68 72 65 66 3d #> [17337] 22 68 74 74 70 73 3a 2f 2f 77 77 77 2e 70 6f 73 69 74 2e 63 6f 22 #> [17359] 20 63 6c 61 73 73 3d 22 65 78 74 65 72 6e 61 6c 2d 6c 69 6e 6b 22 #> [17381] 3e 3c 69 6d 67 20 73 72 63 3d 22 68 74 74 70 73 3a 2f 2f 77 77 77 #> [17403] 2e 74 69 64 79 76 65 72 73 65 2e 6f 72 67 2f 70 6f 73 69 74 2d 6c #> [17425] 6f 67 6f 2e 73 76 67 22 20 61 6c 74 3d 22 50 6f 73 69 74 22 20 68 #> [17447] 65 69 67 68 74 3d 22 31 36 22 20 77 69 64 74 68 3d 22 36 32 22 20 #> [17469] 73 74 79 6c 65 3d 22 6d 61 72 67 69 6e 2d 62 6f 74 74 6f 6d 3a 20 #> [17491] 33 70 78 3b 22 3e 3c 2f 61 3e 20 3c 62 72 3e 3c 73 6d 61 6c 6c 20 #> [17513] 63 6c 61 73 73 3d 22 72 6f 6c 65 73 22 3e 20 43 6f 70 79 72 69 67 #> [17535] 68 74 20 68 6f 6c 64 65 72 2c 20 66 75 6e 64 65 72 20 3c 2f 73 6d #> [17557] 61 6c 6c 3e 20 20 3c 2f 6c 69 3e 0a 3c 6c 69 3e 3c 61 20 68 72 65 #> [17579] 66 3d 22 61 75 74 68 6f 72 73 2e 68 74 6d 6c 22 3e 4d 6f 72 65 20 #> [17601] 61 62 6f 75 74 20 61 75 74 68 6f 72 73 2e 2e 2e 3c 2f 61 3e 3c 2f #> [17623] 6c 69 3e 0a 3c 2f 75 6c 3e 0a 3c 2f 64 69 76 3e 0a 0a 0a 0a 20 20 #> [17645] 3c 2f 61 73 69 64 65 3e 0a 3c 2f 64 69 76 3e 0a 0a 0a 20 20 20 3c #> [17667] 2f 64 69 76 3e 0a 20 20 3c 66 6f 6f 74 65 72 3e 3c 64 69 76 20 63 #> [17689] 6c 61 73 73 3d 22 63 6f 6e 74 61 69 6e 65 72 22 3e 0a 20 20 3c 64 #> [17711] 69 76 20 63 6c 61 73 73 3d 22 70 6b 67 64 6f 77 6e 2d 66 6f 6f 74 #> [17733] 65 72 2d 6c 65 66 74 22 3e 0a 20 20 3c 70 3e 44 65 76 65 6c 6f 70 #> [17755] 65 64 20 62 79 20 3c 61 20 68 72 65 66 3d 22 68 74 74 70 73 3a 2f #> [17777] 2f 68 61 64 6c 65 79 2e 6e 7a 22 20 63 6c 61 73 73 3d 22 65 78 74 #> [17799] 65 72 6e 61 6c 2d 6c 69 6e 6b 22 3e 48 61 64 6c 65 79 20 57 69 63 #> [17821] 6b 68 61 6d 3c 2f 61 3e 2c 20 3c 61 20 68 72 65 66 3d 22 68 74 74 #> [17843] 70 73 3a 2f 2f 77 77 77 2e 70 6f 73 69 74 2e 63 6f 22 20 63 6c 61 #> [17865] 73 73 3d 22 65 78 74 65 72 6e 61 6c 2d 6c 69 6e 6b 22 3e 3c 69 6d #> [17887] 67 20 73 72 63 3d 22 68 74 74 70 73 3a 2f 2f 77 77 77 2e 74 69 64 #> [17909] 79 76 65 72 73 65 2e 6f 72 67 2f 70 6f 73 69 74 2d 6c 6f 67 6f 2e #> [17931] 73 76 67 22 20 61 6c 74 3d 22 50 6f 73 69 74 22 20 68 65 69 67 68 #> [17953] 74 3d 22 31 36 22 20 77 69 64 74 68 3d 22 36 32 22 20 73 74 79 6c #> [17975] 65 3d 22 6d 61 72 67 69 6e 2d 62 6f 74 74 6f 6d 3a 20 33 70 78 3b #> [17997] 22 3e 3c 2f 61 3e 2e 3c 2f 70 3e 0a 3c 2f 64 69 76 3e 0a 0a 3c 64 #> [18019] 69 76 20 63 6c 61 73 73 3d 22 70 6b 67 64 6f 77 6e 2d 66 6f 6f 74 #> [18041] 65 72 2d 72 69 67 68 74 22 3e 0a 20 20 3c 70 3e 53 69 74 65 20 62 #> [18063] 75 69 6c 74 20 77 69 74 68 20 3c 61 20 68 72 65 66 3d 22 68 74 74 #> [18085] 70 73 3a 2f 2f 70 6b 67 64 6f 77 6e 2e 72 2d 6c 69 62 2e 6f 72 67 #> [18107] 2f 22 20 63 6c 61 73 73 3d 22 65 78 74 65 72 6e 61 6c 2d 6c 69 6e #> [18129] 6b 22 3e 70 6b 67 64 6f 77 6e 3c 2f 61 3e 20 32 2e 31 2e 30 2e 3c #> [18151] 2f 70 3e 0a 3c 2f 64 69 76 3e 0a 0a 20 20 3c 2f 64 69 76 3e 3c 2f #> [18173] 66 6f 6f 74 65 72 3e 0a 3c 2f 62 6f 64 79 3e 0a 3c 2f 68 74 6d 6c #> [18195] 3e 0a resp |> resp_body_string() #> [1] \"\\n\\n\\n \\n \\n \\n \\nPerform HTTP Requests and Process the Responses • httr2<\/title>\\n \\n \\n \\n \\n \\n \\n