[英]How to login and then download a file from aspx web pages with R
我正在嘗試使用R自動下載此網頁上可用的收入動態面板研究文件。點擊任何這些文件會將用戶帶到此登錄/身份驗證頁面 。 身份驗證后,可以使用Web瀏覽器輕松下載文件。 不幸的是,下面的httr
代碼似乎沒有維護身份驗證。 我已經嘗試在Chrome中檢查Login.aspx頁面中的Headers
( 如此處所述 ),但即使我認為我傳遞了所有正確的值,它似乎也不會保持身份驗證。 我不在乎是否用httr
或RCurl
或其他東西完成,我只是想在R內部工作,所以我不需要讓這個腳本的用戶必須手動下載文件或者使用一些完全獨立的程序。 我的一個嘗試是在下面,但它不起作用。 任何幫助,將不勝感激。 謝謝!! :d
require(httr)
values <-
list(
"ctl00$ContentPlaceHolder3$Login1$UserName" = "you@email.com" ,
"ctl00$ContentPlaceHolder3$Login1$Password" = "somepassword" ,
"ctl00$ContentPlaceHolder3$Login1$LoginButton" = "Log In" ,
"_LASTFOCUS" = "" ,
"_EVENTTARGET" = "" ,
"_EVENTARGUMENT" = ""
)
POST( "http://simba.isr.umich.edu/u/Login.aspx?redir=http%3a%2f%2fsimba.isr.umich.edu%2fZips%2fZipMain.aspx" , body = values )
resp <- GET( "http://simba.isr.umich.edu/Zips/GetFile.aspx" , query = list( file = "1053" ) )
除了在認證后存儲cookie(參見我的上述評論)之外,您的解決方案中還有另一個問題點:ASP.net站點在cookie中設置一個VIEWSTATE
鍵值對,在您的查詢中保留 - 如果您檢查,則甚至無法登錄您的示例( POST
命令的結果包含有關如何登錄的信息,只需查看它)。
概述可能的解決方案:
加載RCurl
包:
> library(RCurl)
設置一些方便的curl
選項:
> curl = getCurlHandle() > curlSetOpt(cookiejar = 'cookies.txt', followlocation = TRUE, autoreferer = TRUE, curl = curl)
第一次加載頁面以捕獲VIEWSTATE
:
> html <- getURL('http://simba.isr.umich.edu/u/Login.aspx', curl = curl)
使用正則表達式或任何其他工具提取VIEWSTATE
:
> viewstate <- as.character(sub('.*id="__VIEWSTATE" value="([0-9a-zA-Z+/=]*).*', '\\\\1', html))
將參數設置為用戶名,密碼和VIEWSTATE
:
> params <- list( 'ctl00$ContentPlaceHolder3$Login1$UserName' = '<USERNAME>', 'ctl00$ContentPlaceHolder3$Login1$Password' = '<PASSWORD>', 'ctl00$ContentPlaceHolder3$Login1$LoginButton' = 'Log In', '__VIEWSTATE' = viewstate )
最后登錄:
> html = postForm('http://simba.isr.umich.edu/u/Login.aspx', .params = params, curl = curl)
恭喜,現在您已登錄並且curl
持有cookie驗證!
驗證您是否已登錄:
> grepl('Logout', html) [1] TRUE
因此,您可以繼續下載任何文件 - 只需確保在所有查詢中傳遞curl = curl
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.