【发布时间】:2015-06-17 09:56:33
【问题描述】:
我正在尝试定期列出托管在 MODIS 全球蒸散项目 (MOD16) 的 FTP 服务器上的文件。
## required package
library(RCurl)
## ftp server
ch_ftp <- "ftp://ftp.ntsg.umt.edu/pub/MODIS/NTSG_Products/MOD16/MOD16A2.105_MERRAGMAO/"
## list and reformat available subfolders
ch_fls <- getURL(ch_ftp, verbose = TRUE, dirlistonly = TRUE)
ls_fls <- strsplit(ch_fls, "\n")
ch_fls <- unlist(ls_fls)
## list files in current folder
for (i in ch_fls) {
ch_hdf <- paste0(ch_ftp, i)
getURL(ch_hdf, verbose = TRUE, dirlistonly = TRUE)
}
经过一些迭代,RCurl::getURL 抛出以下错误消息。
< 530 Sorry, the maximum number of clients (5) from your host are already connected.
* Access denied: 530
* Closing connection 16
Show Traceback
Rerun with Debug
Error in function (type, msg, asError = TRUE) : Access denied: 530
显然,RCurl::getURL 在每次迭代期间都会打开与 FTP 服务器的连接,但没有足够快地关闭它们。几分钟后,服务器再次可以访问,但是在重新初始化脚本并等待前几次迭代时会抛出相同的错误消息。有没有办法在检索到文件列表后立即手动关闭RCurl::getURL 建立的连接?
【问题讨论】: