从受密码保护的站点读取信息

时间:2011-03-24 14:14:23

标签: r

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

有没有办法可以使用用户名和密码传递我需要的特定awstats数据的URL。

网址格式为:

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

感谢。

4 个答案:

答案 0 :(得分:7)

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

  

网址

     

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

因此,您的网址字符串应如下所示:

  

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

但这可能仅限于Windows。

希望这有帮助!

答案 1 :(得分:7)

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

  

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()或交互式运行脚本,则可以添加eg:

user <- readline("Give the username : ")
passw <- readline("Give the password : ")

Url <- paste("http://",user,":",passw,"@domain.name...")
readLines(Url,...)

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

答案 2 :(得分:3)

如果您可以访问该框,则可以随时阅读awstats日志文件。如果您可以插入框中,则可以使用rsync轻松同步最新文件。

使用

的轻微障碍
http://username:password@domain...

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

答案 3 :(得分:2)

将网址格式设置为http://username:password@domain...以便与download.file一起使用对我不起作用,但R.utils提供了完美运行的功能downloadFile

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

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

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