#' Convert an 'httr' call to 'curl' command line #' #' @param complete_httr_verb_call wrap an `httr` `VERB` call with this function #' and it will return the text of a working `curl` command line #' @param use_web_service if `TRUE` (`FALSE` by default) this function will use #' `https://curl.se/h2c/` to process the headers. #' @export #' @examples \dontrun{ #' h2c( #' httr::GET( #' url = "https://rud.is/", #' httr::user_agent(splashr::ua_apple_tv), #' query = list( #' a = "b", #' c = 1 #' ) #' ) #' ) #' } h2c <- function(complete_httr_verb_call, use_web_service = FALSE) { ƒ_call <- substitute(complete_httr_verb_call) capture.output( capture.output( httr::with_verbose( eval(ƒ_call) ), type = "message") -> res ) -> junk out <- tempfile() res[grepl("^->", res)] %>% sub("^-> ", "", .) %>% paste0(collapse = "\n") -> res if (use_web_service) { httr::POST( url = "https://curl.se/h2c/", httr::user_agent("curl/7.64.1"), httr::accept("*/*"), httr::content_type("application/x-www-form-urlencoded"), body = sprintf("http=%s", curl::curl_escape(res)), encode = "raw" ) -> res1 trimws(rawToChar(res1$content)) } else { writeLines(res, out) perl <- find_perl() args <- system.file("bin", "h2c.pl", package = "httr2curl") processx::run( command = perl, args = args, stdin = out ) -> res trimws(res$stdout) } }