Когда я пытаюсь загрузить URL с протоколом HTTP, я получаю сообщение об ошибке 400:
library(httr) x1 <- "http://www.sonnenwende-harsewinkel.de/öko-gas/bürgerwerke/" resp <- httr::GET(x1, httr::timeout(60)) resp[["status_code"]] #400
Проблема решается при переключении на протокол HTTPS:
x2 <- "https://www.sonnenwende-harsewinkel.de/öko-gas/bürgerwerke/" resp <- httr::GET(x2, httr::timeout(60)) resp[["status_code"]] #200
Когда я ввожу HTTP-адрес в своем веб-браузере, меня перенаправляют на HTTPS-адрес. Можно ли перенаправить, используя httr тоже?
httr
CORS Anywhere API предназначен для этой цели. Добавьте https://cors-anywhere.herokuapp.com/ к вашему URL и запустите запрос. Это может занять немного больше времени, поскольку он работает через другой сервер, но он позаботится о проблеме https. Вот ваш пример использования cors в любом месте.
https://cors-anywhere.herokuapp.com/
library(httr) # combine cors-anywhere url and user url cors <- "https://cors-anywhere.herokuapp.com/" url <- "http://www.sonnenwende-harsewinkel.de/oko-gas/burgerwerke/" request <- paste0(cors, url) # run request response <- GET(request, add_headers("X-Requested-With" = "XmlHttpRequest")) content(response, "text", encoding = "utf-8")
Почему бы просто не добавить s к URL, если вы получите http 400?
s
rGET <- function(url, ...) { res <- httr::GET(url, ...) if(res$status_code == 400) return(httr::GET(gsub("http://", "https://", url), ...)) else return(res) }
Так что вы можете сделать это
rGET("http://www.sonnenwende-harsewinkel.de/öko-gas/bürgerwerke/") #> Response [https://www.sonnenwende-harsewinkel.de/öko-gas/bürgerwerke/] #> Date: 2020-04-30 20:59 #> Status: 200 #> Content-Type: text/html; charset=UTF-8 #> Size: 51.7 kB #> <!DOCTYPE html> #> <html lang="de-DE"><head> #> <meta charset="utf-8"/> #> <link rel="dns-prefetch preconnect" href="https://u.jimcdn.com/" crossorigin="a... #> <link rel="dns-prefetch preconnect" href="https://assets.jimstatic.com/" crosso... #> <link rel="dns-prefetch preconnect" href="https://image.jimcdn.com" crossorigin... #> <link rel="dns-prefetch preconnect" href="https://fonts.jimstatic.com" crossori... #> <link rel="dns-prefetch preconnect" href="https://www.google-analytics.com" cro... #> <meta name="viewport" content="width=device-width, initial-scale=1"/> #> <meta http-equiv="X-UA-Compatible" content="IE=edge"/> #> ...