http_error
(на самом деле из библиотеки httr
) - очень простая функция: она загружает URL-адрес, заданный символом (http_error.character
), извлекает ответ (http_error.response
) и в конечном итоге просматривает код ответа(http_error.integer
).Если код ответа >=400
, функция возвращает TRUE
, в противном случае FALSE
.
Что говорит ваша ошибка, так это то, что вы (или любая функция в вашей цепочке) пытается вызвать http_error
для simpleError
объект.Я предполагаю, что ваши настройки брандмауэра блокируют запрос.Поскольку запрос заблокирован, базовый httr::RETRY
(который вызывается из oadoi_fetch
) возвращает ошибку вместо правильного объекта ответа, и http_error
видит только этот объект ошибки и прерывает работу.
Если я локально отключаю свой прокси (через который я могу делать запросы), я также получаю сообщение об ошибке:
library(roadoi)
Sys.unsetenv(c("HTTP_PROXY", "HTTPS_PROXY"))
oadoi_fetch("10.1038/nature12373", email = "name@whatever.com")
# Error in UseMethod("http_error") :
# no applicable method for 'http_error' applied to an object of class
# "c('simpleError', 'error', 'condition')"
Как только мой прокси настроен правильно, я получаю
Sys.setenv(HTTPS_PROXY = my_proxy, HTTP_PROXY = my_proxy)
oadoi_fetch("10.1038/nature12373", email = "name@whatever.com")
# # A tibble: 1 x 16
# doi best_oa_location oa_locations data_standard is_oa genre journal_is_oa journal_is_in_d~ journal_issns journal_name publisher title year updated non_compliant authors
# <chr> <list> <list> <int> <lgl> <chr> <lgl> <lgl> <chr> <chr> <chr> <chr> <chr> <chr> <list> <list>
# 1 10.1038~ <tibble [1 x 10]> <tibble [4 x~ 2 TRUE journa~ FALSE FALSE 0028-0836,147~ Nature Springer ~ Nanometre-s~ 2013 2019-04-0~
Если проблема действительно в прокси, я бы попробовал следующее, что помогло мне на моей корпоративной машине с Windows, но может зависеть от ваших локальных настроек ИТ:
## get the proxy settings
system("netsh winhttp show proxy")
Sys.setenv(HTTP_PROXY = <the proxy from netsh>, HTTPS_PROXY = <the proxy from netsh>)
На самом деле, вы можете легко воспроизвести ошибку:
httr::http_error(simpleError("Cannot reach the page"))
# Error in UseMethod("http_error") :
# no applicable method for 'http_error' applied to an object of class
# "c('simpleError', # 'error', 'condition')"