asp.net - 如何使用R登录然后从aspx网页下载文件

标签 asp.net r download rcurl httr

我正在尝试自动下载 this web page 上可用的收入动态面板研究文件。使用 R。单击这些文件中的任何一个都会将用户带到 this login/authentication page .身份验证后,可以使用 Web 浏览器轻松下载文件。不幸的是,httr下面的代码似乎没有维护身份验证。我试过检查 Headers在 Chrome 中的 Login.aspx 页面( as described here ),但即使我相信我传递了所有正确的值,它似乎也没有保持身份验证。我不在乎它是否完成了 httrRCurl或者其他什么,我只是想要在 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 站点设置了 VIEWSTATE cookie 中的键值对将保留在您的查询中 - 如果您检查,您甚至无法在您的示例中登录(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在您的所有查询中。
  • 关于asp.net - 如何使用R登录然后从aspx网页下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15853204/

    相关文章:

    R:将文件复制到远程服务器

    javascript - 您如何使用 Angular 处理需要授权 token 的下载链接?

    url - Ansible-从Github存储库下载最新版本的二进制文件

    heroku 运行 rake 任务来下载文件

    javascript - CSS 转换在 ASP.NET Web 窗体中不起作用

    c# - 在 c# asp.net 中,静态类比非静态类更有效吗?

    r - 分组 DataFrame 并根据分组对多列中的行进行平均,忽略零

    R:总结相邻的矩阵元素。如何加速?

    c# - ASP.Net : AspNetSqlMembershipProvider "unique email" problem

    asp.net - Application Insights 的应用程序 map 不显示依赖项调用