给出两个网址:
iris <- "http://service.iris.edu/fdsnws/event/1/query?starttime=2010-04-04&endtime=2010-04-05"
caltech <- "http://service.scedc.caltech.edu/fdsnws/event/1/query?starttime=2010-04-04&endtime=2010-04-05"
正在运行
doc <- xmlInternalTreeParse(iris)
有效,但
doc <- xmlInternalTreeParse(caltech)
返回
Error: 1: failed to load HTTP resource
尽管我的浏览器都能正常工作。此外,使用httr包检查状态会给出&#34; 200&#34;,e。 G:
> GET(caltech)$status_code
[1] 200
>
这里发生了什么?这导致我的CRF上的rFDSN包出现问题,所以我非常感谢一些指导!
答案 0 :(得分:1)
我可以非常一致地完成以下工作:
library(httr)
library(xml2)
library(XML)
UA <- "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36"
res <- GET("http://service.scedc.caltech.edu/fdsnws/event/1/query",
query=list(starttime="2010-04-04", endtime="2010-04-05"),
user_agent(UA), verbose())
x_doc <- read_xml(content(res, as="text", encoding="UTF-8"))
ns <- xml_ns_rename(xml_ns(x_doc), d1="def")
xml_find_all(x_doc, ".//def:event", ns)
## {xml_nodeset (118)}
## [1] <event publicID="quakeml:service.scedc.caltech.edu/fdsnws/even ...
## [2] <event publicID="quakeml:service.scedc.caltech.edu/fdsnws/even ...
## [3] <event publicID="quakeml:service.scedc.caltech.edu/fdsnws/even ...
## [4] <event publicID="quakeml:service.scedc.caltech.edu/fdsnws/even ...
## [5] <event publicID="quakeml:service.scedc.caltech.edu/fdsnws/even ...
## [6] <event publicID="quakeml:service.scedc.caltech.edu/fdsnws/even ...
## [7] <event publicID="quakeml:service.scedc.caltech.edu/fdsnws/even ...
## [8] <event publicID="quakeml:service.scedc.caltech.edu/fdsnws/even ...
## [9] <event publicID="quakeml:service.scedc.caltech.edu/fdsnws/even ...
## [10] <event publicID="quakeml:service.scedc.caltech.edu/fdsnws/even ...
## ...
您可以删除生产中的verbose()
。奇怪的是,用户代理可能会有所作为,但我可以让它在没有它的情况下工作(尽管当它不存在时该网站会出错)。
注意:
res$times
## redirect namelookup connect pretransfer starttransfer total
## 0.000000 0.001938 0.158912 0.159512 13.198304 13.629542
也相当一致(每次请求约15秒)。您可能希望使用httr::timeout()
强制执行30秒以上的超时(将其添加到GET()
的参数中)。
我知道你正在使用XML
包,但你也可能知道那里的命名空间舞蹈:
X_doc <- xmlInternalTreeParse(content(res, as="text", encoding="UTF-8"))
与read_xml()
调用同样(并且始终如一)。