【问题标题】:Can't download .csv from dropbox无法从 Dropbox 下载 .csv
【发布时间】:2017-04-05 19:39:59
【问题描述】:
require(data.table)
require(httr)

url = "http://www.dropbox.com/s/0brabdf53lc37i/data.csv?dl=1"
request <- GET(url)


Loading required package: data.table
Loading required package: httr
Error in curl::curl_fetch_memory(url, handle = handle) : 
  Couldn't resolve host name
Calls: GET ... request_fetch -> request_fetch.write_memory ->  -> .Call
Execution halted

什么给了?该 URL 在我的浏览器中运行良好,其他人通过这种方式成功下载了 Dropbox 文件...

【问题讨论】:

  • 这段代码在我的本地 R 控制台中为我工作。
  • @TimBiegeleisen 好的,谢谢,也许是防火墙问题或其他什么...?
  • 但是当我将 URL 粘贴到 Chrome 中时,我无法访问该文件。这是某种配置问题。
  • @TimBiegeleisen 啊,好的,我明白了。嗯,这确实缩小了一点。我将不得不调查我的 R 会话的配置。谢谢。
  • 在我的 Mac 上加载良好,但我看到 request 列表的第一个注释是 $ url : chr "https://www.dropbox.com/s/0brabdf53lc37i/data.csv?dl=1" ......所以想知道您是否对“https”站点有问题。

标签: r


【解决方案1】:

经过大量搜索,我对您的问题有了答案。当我注意到 R 将您的 DropBox URL 的协议从 http 更改为 https 时,我开始怀疑您可能有证书问题。正如this SO post 所提到的,情况似乎正是如此。尝试使用此代码:

require(data.table)
require(httr)

cafile <- system.file("CurlSSL", "cacert.pem", package = "RCurl")
url = "http://www.dropbox.com/s/0brabdf53lc37i/data.csv?dl=1"
request <- GET(url, config(cainfo = cafile))

这里发生了什么:

证书文件cacert.pem 包含由 CA(证书颁发机构)颁发的受信任证书列表。当 DropBox 向 R 发送其公共 SSL 证书时,R 将搜索此受信任证书列表以查看是否可以找到它。如果可以,它将允许 SSL 握手完成,并且您的数据将被下载。

您遇到此问题但许多阅读您的问题的人没有遇到此问题的原因是您可能从未在 R 中配置过 curl 设置。

【讨论】:

    【解决方案2】:

    出现“无法解析”消息是因为 Dropbox 正在将您的 http 请求转换为 https 请求(并非所有服务都可以遵循重定向)并且(很可能)因为您的下载协议无法处理安全 http 并且因为url 不请求原始数据...

    最好解决所有问题,方法是移至主机(保管箱)也将引导您的格式,即 https,然后切换您的代码(如有必要)以使用新协议,并更正 url 以告知保管箱提供原始文件(不是您使用的 ?dl=1 后缀,而是 ?raw=1

    所以:

    1. 将网址切换为安全
    2. 将请求切换为原始
    3. 在浏览器中测试 - 如果这不是一个错误的链接,将可以工作。
    4. 使用R 等可以处理安全传输的url() 函数打开(示例位于this answer

    【讨论】:

      猜你喜欢
      • 2017-12-30
      • 1970-01-01
      • 2021-09-04
      • 1970-01-01
      • 2020-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-04
      相关资源
      最近更新 更多