【问题标题】:RCurl::getURL exceeds maximum number of clientsRCurl::getURL 超过最大客户端数
【发布时间】: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 建立的连接?

【问题讨论】:

    标签: r curl ftp rcurl


    【解决方案1】:

    我正在处理同样的问题。

    使用Sys.sleep(2) 为我修复了它。

    ## list files in current folder
    for (i in ch_fls) {
    
      ch_hdf <- paste0(ch_ftp, i)
      getURL(ch_hdf, verbose = TRUE, dirlistonly = TRUE)
      Sys.sleep(2)
    }
    

    【讨论】:

    • 没错,连接会在一定时间后自动关闭,建议使用Sys.sleep。不过,我想知道是否有(CURL)可能手动关闭在getURL 期间打开的连接以加快速度。
    • 我同意,我仍在寻找更优雅的解决方案来关闭连接。
    猜你喜欢
    • 2014-09-23
    • 2018-02-12
    • 1970-01-01
    • 2015-10-08
    • 2019-04-18
    • 1970-01-01
    • 2019-01-03
    • 2021-07-01
    • 2018-12-01
    相关资源
    最近更新 更多