【问题标题】:How to determine if a url object returns '404 Not Found'?如何确定 url 对象是否返回“404 Not Found”?
【发布时间】:2014-04-17 17:11:22
【问题描述】:

简单地说:如果

x <- read.csv(url)

存在,然后 R 将返回该 url 的内容。一个很好的例子,如果你想试试,可能是 "http://ichart.finance.yahoo.com/table.csv?s=IBM&a=00&b=1&c=2008&d=03&e=4&f=2014&g=d&ignore=.csv" 。如果将该特定 url 分配给 url 并按上述方式运行,它将从包含过去 5 年 IBM 股票数据的 Yahoo 网站加载一个 data.frame 到 x。

但是如何事先判断任何给定的 url 是否会让你 404'd 呢?

类似:

is.404.or.not(url)

或许

status(connect.to(url))

谢谢!

【问题讨论】:

标签: r url http-status-code-404


【解决方案1】:

您可以使用RCurl 包:

R> library(RCurl)
Loading required package: bitops
R> url.exists("http://google.com")
[1] TRUE
R> url.exists("http://csgillespie.org")
[1] FALSE

或者,您可以使用 httr

R> library(httr)
R> http_status(GET("http://google.com"))
$category
[1] "success"

$message
[1] "success: (200) OK"

R> http_status(GET("http://csgillespie.org"))
$category
[1] "server error"

$message
[1] "server error: (503) Service Unavailable"

【讨论】:

  • 这是个好主意。现在,我安装了该软件包,但 R 不会运行 library(RCurl) 命令。我确实在 RCurl 的自述文件中注意到,对于 linux 系统(我正在运行 Ubuntu),您通常必须显式安装 "libcurl-devel" 。现在,更重要的是“libcurl-devel”是该库在 Red Hat RPM 世界中的名称,但我运行的是 Ubuntu。我有三个选择: libcurl4-openssl-dev ; libcurl4-nss-dev ;和 libcurl4-gnutls-dev 。知道它们之间有什么区别吗?
  • httr 给出相同的结果。那是因为它和 RCurl 依赖于一些必须在“libcurl-devel”中的相同包
  • 只需使用apt-get install r-cran-rcurl,所有依赖项都会得到处理 - 类似问题请参阅stackoverflow.com/questions/7765429/…
猜你喜欢
  • 2017-07-01
  • 2016-03-16
  • 2016-11-19
  • 2021-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多