Вероятно, лучший вариант - использовать библиотеку cURL напрямую, а не через оболочку download.file
, которая не предоставляет полную функциональность cURL.Мы можем сделать это, например, с помощью пакета RCurl (хотя другие пакеты, такие как httr или системные вызовы, также могут достичь того же).Использование cURL напрямую позволит вам получить доступ к информации о cURL, включая код ответа.Например:
library(RCurl)
curl = getCurlHandle()
x = getURL("https://en.wikipedia.org/asdfasdfasdf", curl = curl)
write(x, 'output.html')
getCurlInfo(curl)$response.code
# [1] 404
Хотя первый вариант выше намного чище, если вы действительно хотите использовать download.file
, одним из возможных способов было бы перехватить предупреждение с помощью withCallingHandlers
try(withCallingHandlers(
download.file(url, destfile = "output.html", method = "libcurl"),
warning = function(w) {
my.warning <<- sub(".+HTTP status was ", "", w)
}),
silent = TRUE)
cat(my.warning)
'404 Not Found'