【问题标题】:Reading information from a password protected site从受密码保护的站点读取信息
【发布时间】:2011-07-22 04:29:48
【问题描述】:

我一直在使用 readLines() 从 R 教程中的网站抓取信息。我现在希望从我自己的网站(特别是 awstats 数据)中提取数据,但是该域受密码保护。

有没有一种方法可以通过用户名和密码传递我需要的特定 awstats 数据的 url。

url的格式为:

http://domain.name:port/awstats.pl?month=02&year=2011&config=domain.name&lang=en&framename=mainright&output=alldomains

谢谢。

【问题讨论】:

  • 这是http基本认证吗?即,您会在弹出窗口中收到密码提示,输入错误密码时可能会出现 401 Unauthorized Error

标签: r


【解决方案1】:

如果确实是http基本访问认证,connections上的文档提供了一些帮助:

网址

注意 https:// 连接是 仅当 --internet2 或 setInternet2(TRUE) 被用来(使 使用 Internet Explorer 内部), 然后只有当证书是 被认为是有效的。接着就,随即 仅选项,http://user:pass@site 需要的网站的符号 也接受身份验证。

所以你的 URL 字符串应该是这样的:

http://username:password@domain.name:port/awstats.pl?month=02&year=2011&config=domain.name&lang=en&framename=mainright&output=alldomains

这可能仅限于 Windows。

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    您可以在网址中嵌入用户名和密码,例如:

    http://userid:passw@domain.name:port/...

    您可以尝试将其与readLines() 一起使用。如果这不起作用,您可以随时尝试使用url() 打开连接:

    zz <- url("http://userid:passw@domain.name:port/...")
    readLines(zz)
    close(zz)
    

    您也可以使用download.file()下载文件并将其保存在某处

    download.file("theurl","/path/to/file/filename",method="wget")
    

    这会将文件保存在指定的本地路径上。

    编辑:

    正如 csgillespie 所说,您不应该在脚本中包含您的用户名和密码。如果您使用 source() 或交互方式运行脚本,您可以添加例如:

    user <- readline("Give the username : ")
    passw <- readline("Give the password : ")
    
    Url <- paste("http://",user,":",passw,"@domain.name...")
    readLines(Url,...)
    

    从命令行运行时,您可以在 --args 之后传递参数并使用commandArgs 访问它们(请参阅?commandArgs

    【讨论】:

      【解决方案3】:

      如果您有权访问该框,则始终可以只阅读 awstats 日志文件。如果您可以 ssh 进入该框,那么您可以使用 rsync 轻松同步最新文件。

      使用的小问题

      http://username:password@domain...
      

      是您将密码放在 R 脚本中 - 最好避免这种情况。当然,您可以保护它的脚本,但它只需要一个滑动。例如,

      • 有人问你一个类似的问题,你发布了你的脚本
      • 网址http://username:password@domain... 将(?)现在显示在您的服务器日志中
      • ...

      【讨论】:

      • +1 表示警告。当然,应该在使用 readline() 请求用户名和密码或将其作为参数传递给脚本后构造 url。但是“如果你可以使用盒子”需要 R 外部的解决方案。
      • @Joris:“来自 R 外部的解决方案”-我确定 R 必须有一个 ssh 的库;)我怀疑 OP 可能可以通过示例 url 的方式访问该框是构建的,但这只是一个猜测。
      • 完成它并不是那么简单,而且相当依赖于相关机器和服务器的架构。我看到它发生的唯一方法是在 R 脚本中使用system(),但这远非最佳解决方案,因为您再次遇到密码问题......
      • 谢谢@csgillespie。我还需要我没有意识到的 --internet2 选项。
      【解决方案4】:

      将 url 格式化为 http://username:password@domain... 以与 download.file 一起使用对我不起作用,但 R.utils 提供了完美运行的函数 downloadFile

      require(R.utils)
      downloadFile(myurl, myfile, username = "myusername", password ="mypassword")
      

      请参阅@joris-meys 的回答,了解如何避免在脚本中以纯文本形式包含您的用户名和密码。

      编辑 除了看起来像downloadFile 只是将URL 重新格式化为http://username:password@domain...?嗯……

      【讨论】:

        猜你喜欢
        • 2014-07-07
        • 2013-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-18
        • 1970-01-01
        • 2013-03-02
        • 1970-01-01
        相关资源
        最近更新 更多