roadoi 中的 UseMethod("http_error") 错误
Error in UseMethod("http_error") in roadoi
我正在尝试 roadoi
从 R 访问 Unpaywall,但无论我尝试查询什么,我都会收到以下响应:
Error in UseMethod("http_error") : no applicable method for
'http_error' applied to an object of class "c('simpleError', 'error',
'condition')"
运行 methods(http_error)
给我这个:
[1] http_error.character* http_error.integer* http_error.response*
这可能是我在机构防火墙后面造成的吗? (即便如此,这会是回应似乎很奇怪......)
有办法解决吗?
http_error
(实际上来自库 httr
)是一个非常简单的函数:它加载一个由字符 (http_error.character
) 给出的 url,检索响应(http_error.response
) 并最终查看响应代码 (http_error.integer
)。如果响应代码是 >=400
函数 returns TRUE
否则 FALSE
.
您的错误说明,您(或链中的任何函数)试图在 simpleError
对象上调用 http_error
。我的猜测是您的防火墙设置阻止了请求。因为请求被阻止,底层 httr::RETRY
(从 oadoi_fetch
调用)returns 一个错误而不是正确的响应对象,并且 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 机器有帮助,但可能取决于您的本地 IT 设置:
## 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')"
我正在尝试 roadoi
从 R 访问 Unpaywall,但无论我尝试查询什么,我都会收到以下响应:
Error in UseMethod("http_error") : no applicable method for 'http_error' applied to an object of class "c('simpleError', 'error', 'condition')"
运行 methods(http_error)
给我这个:
[1] http_error.character* http_error.integer* http_error.response*
这可能是我在机构防火墙后面造成的吗? (即便如此,这会是回应似乎很奇怪......)
有办法解决吗?
http_error
(实际上来自库 httr
)是一个非常简单的函数:它加载一个由字符 (http_error.character
) 给出的 url,检索响应(http_error.response
) 并最终查看响应代码 (http_error.integer
)。如果响应代码是 >=400
函数 returns TRUE
否则 FALSE
.
您的错误说明,您(或链中的任何函数)试图在 simpleError
对象上调用 http_error
。我的猜测是您的防火墙设置阻止了请求。因为请求被阻止,底层 httr::RETRY
(从 oadoi_fetch
调用)returns 一个错误而不是正确的响应对象,并且 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 机器有帮助,但可能取决于您的本地 IT 设置:
## 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')"