2011-03-24 170 views
12

我一直在使用readLines()從R教程中的網站上刮取信息。我現在希望從我自己的網站(特別是awstats數據)提取數據,但該域名受密碼保護。從受密碼保護的網站讀取信息

有沒有一種方法可以將我需要的特定awstats數據通過網址傳遞給用戶名和密碼。

URL的格式爲:

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

感謝。

+0

這是一個http基本認證?也就是說,你會在彈出的窗口中看到密碼提示,並且在輸入錯誤的密碼 – Martin 2011-03-24 14:26:12

回答

6

如果這確實是一個基本的HTTP訪問認證,在connections的文檔提供了一些幫助:

網址

需要注意的是https://開頭連接 只支持如果--internet2或 使用setInternet2(TRUE)(使 使用Internet Explorer內部), ,然後僅在證書被認爲是有效的 時使用。只有 選項,還需要http://user:[email protected] 表示需要 驗證的站點的符號。

所以你的URL字符串應該是這樣的:

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

這可能是Windows的唯一,但。

希望這會有所幫助!

+0

時可能會出現401未授權錯誤。甜,--internet2選項是個竅門。謝謝。 – John 2011-03-24 20:33:53

5

您可以在URL像嵌入用戶名和密碼:

http://userid:[email protected]:port/ ...

這個你可以嘗試用readLines()使用。如果還是不行,您可以使用url()打開連接總是嘗試一種解決方法:

zz <- url("http://userid:[email protected]:port/...") 
readLines(zz) 
close(zz) 

您也可以下載該文件並保存它使用的地方download.file()

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

這樣可以節省文件在指定的本地路徑上。

編輯:

爲csgillespie說,你不應該包括你在腳本的用戶名和密碼。如果您用源腳本()或交互,您可以添加例如:

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:[email protected] 

輕微的障礙是,你是在R腳本把你的密碼 - 最好避免這種情況。當然你可以保證它的腳本,但它只需要一個滑。例如,

+0

用於警告。在使用例如readline()或者將其作爲參數傳遞給腳本之後,在請求用戶名和密碼之後,應該創建url。但是「如果你有權訪問這個盒子」需要一個來自外部的解決方案R. – 2011-03-24 14:51:27

+0

@Joris:「來自R之外的解決方案」 - 我確信R必須有'ssh'的庫;)我懷疑OP可能會可以通過構造示例url的方式訪問該框,但這只是一個猜測。 – csgillespie 2011-03-24 14:57:37

+0

要完成它並不那麼簡單,並且非常依賴所涉及的機器和服務器的體系結構。我看到它發生的唯一方法是在R腳本中使用'system()',但這遠非最佳解決方案,因爲您不知道密碼的問題...... – 2011-03-24 15:04:30

2

格式化網址爲http://username:[email protected]download.file使用了我沒有工作,但R.utils提供的功能downloadFile完美的作品:

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

請參閱@ joris-meys答案,以避免在腳本中以明文形式包含您的用戶名和密碼。

編輯除了看起來像downloadFile只是將URL重新格式化爲http://username:[email protected]?嗯...