2016-09-04 79 views
0

鑑於兩個網址:xmlInternalTreeParse給出 「無法加載HTTP資源」,但URL負載在瀏覽器

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包檢查狀態給出「200」,例如, g .:

> GET(caltech)$status_code 
[1] 200 
> 

這是怎麼回事?這在CRAN上導致我的rFDSN包問題,所以我非常感謝一些指導!

+0

caltech站點(缺少引號)定期返回503錯誤(在瀏覽器和R中)。您的pkg shld正在查找狀態代碼並向用戶顯示有關HTTP錯誤的警告。 – hrbrmstr

+0

是的,我注意到那些偶然的錯誤,但是即使它始終如一地給出了200的狀態,xml解析器仍然會失敗。它以某種方式「更敏感」(不太容忍延遲,或者什麼)? – glossarch

+0

他們遠不是偶然的(無論是在我們專用的互聯網主機 - 我爲Sonar項目工作還是在Comcast上工作,我都會收到)。直到我可以從網站獲得成功的回報,我將無法進一步調試。 – hrbrmstr

回答

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秒)。您可能需要強制執行30 + s超時時間httr::timeout()(將其添加到GET()的參數中)。

我知道你正在使用的XML包,但你也可能知道的命名空間舞蹈那裏:

X_doc <- xmlInternalTreeParse(content(res, as="text", encoding="UTF-8")) 

作品同樣也(和一致)爲read_xml()電話。