1 # Copyright (C) The Arvados Authors. All rights reserved.
3 # SPDX-License-Identifier: Apache-2.0
7 HttpRequest <- R6::R6Class(
13 validContentTypes = NULL,
16 initialize = function()
18 self$validContentTypes <- c("text", "raw")
19 self$validVerbs <- c("GET", "POST", "PUT", "DELETE", "PROPFIND", "MOVE", "COPY")
22 exec = function(verb, url, headers = NULL, body = NULL, queryParams = NULL,
25 if(!(verb %in% self$validVerbs))
26 stop("Http verb is not valid.")
28 urlQuery <- self$createQuery(queryParams)
29 url <- paste0(url, urlQuery)
31 config <- httr::add_headers(unlist(headers))
32 if(toString(Sys.getenv("ARVADOS_API_HOST_INSECURE") == "TRUE"))
33 config$options = list(ssl_verifypeer = 0L)
35 # times = 1 regular call + numberOfRetries
36 response <- httr::RETRY(verb, url = url, body = body,
37 config = config, times = retryTimes + 1)
40 createQuery = function(queryParams)
42 queryParams <- Filter(Negate(is.null), queryParams)
44 query <- sapply(queryParams, function(param)
46 if(is.list(param) || length(param) > 1)
47 param <- RListToPythonList(param, ",")
49 URLencode(as.character(param), reserved = T, repeated = T)
55 query <- paste0(names(query), "=", query, collapse = "&")
57 return(paste0("/?", query))
63 getConnection = function(url, headers, openMode)
65 h <- curl::new_handle()
66 curl::handle_setheaders(h, .list = headers)
68 if(toString(Sys.getenv("ARVADOS_API_HOST_INSECURE") == "TRUE"))
69 curl::handle_setopt(h, ssl_verifypeer = 0L)
71 conn <- curl::curl(url = url, open = openMode, handle = h)