Перенаправить GET на HTTPS, если необходимо - PullRequest
0 голосов
/ 30 апреля 2020

Когда я пытаюсь загрузить 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 тоже?

Ответы [ 2 ]

2 голосов
/ 01 мая 2020

CORS Anywhere API предназначен для этой цели. Добавьте https://cors-anywhere.herokuapp.com/ к вашему URL и запустите запрос. Это может занять немного больше времени, поскольку он работает через другой сервер, но он позаботится о проблеме https. Вот ваш пример использования cors в любом месте.

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")
1 голос
/ 01 мая 2020

Почему бы просто не добавить s к URL, если вы получите http 400?

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"/>
#> ...
...