1 # Copyright (C) The Arvados Authors. All rights reserved.
3 # SPDX-License-Identifier: Apache-2.0
5 HttpRequest <- R6::R6Class(
11 validContentTypes = NULL,
14 initialize = function()
16 self$validContentTypes <- c("text", "raw")
17 self$validVerbs <- c("GET", "POST", "PUT", "DELETE", "PROPFIND", "MOVE", "COPY")
20 exec = function(verb, url, headers = NULL, body = NULL, queryParams = NULL,
23 if(!(verb %in% self$validVerbs))
24 stop("Http verb is not valid.")
26 urlQuery <- self$createQuery(queryParams)
27 url <- paste0(url, urlQuery)
29 config <- httr::add_headers(unlist(headers))
30 if(toString(Sys.getenv("ARVADOS_API_HOST_INSECURE") == "TRUE"))
31 config$options = list(ssl_verifypeer = 0L)
33 # times = 1 regular call + numberOfRetries
34 response <- httr::RETRY(verb, url = url, body = body,
35 config = config, times = retryTimes + 1)
38 createQuery = function(queryParams)
40 queryParams <- Filter(Negate(is.null), queryParams)
42 query <- sapply(queryParams, function(param)
44 if(is.list(param) || length(param) > 1)
45 param <- RListToPythonList(param, ",")
47 URLencode(as.character(param), reserved = T, repeated = T)
53 query <- paste0(names(query), "=", query, collapse = "&")
55 return(paste0("?", query))
61 getConnection = function(url, headers, openMode)
63 h <- curl::new_handle()
64 curl::handle_setheaders(h, .list = headers)
66 if(toString(Sys.getenv("ARVADOS_API_HOST_INSECURE") == "TRUE"))
67 curl::handle_setopt(h, ssl_verifypeer = 0L)
69 conn <- curl::curl(url = url, open = openMode, handle = h)