R - 使用RCurl发布登录表单

SOC*_*ell 2 forms r http-post rcurl

我是新手使用R发布表单然后从网上下载数据.我有一个问题可能很容易让那里的人发现我做错了什么,所以我感谢你的耐心等待.我有一台Win7 PC和Firefox 23.x是我的典型浏览器.

我正在尝试发布显示的主要表单

http://www.aplia.com/

我有以下R脚本:

your.username <- 'username'
your.password <- 'password'
setwd( "C:/Users/Desktop/Aplia/data" )

require(SAScii) 
require(RCurl)
require(XML)
agent="Firefox/23.0" 

options(RCurlOptions = list(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl")))
curl = getCurlHandle()
curlSetOpt(
cookiejar = 'cookies.txt' ,
useragent = agent,
followlocation = TRUE ,
autoreferer = TRUE ,
curl = curl
)

# list parameters to pass to the website (pulled from the source html)
params <-
list(
'userAgent' = agent,
'screenWidth' = "",
'screenHeight' = "",
'flashMajor' = "",
'flashMinor' = "",
'flashBuild' = "",
'flashPatch' = "",
'redirect' = "",
'referrer' = "http://www.aplia.com",
'txtEmail' = your.username,
'txtPassword' = your.password 
    )

# logs into the form
html = postForm('https://courses.aplia.com/', .params = params, curl = curl)
html

# download a file once form is posted
html <-
getURL(
"http://courses.aplia.com/af/servlet/mngstudents?ctx=filename" ,
curl = curl
)
html
Run Code Online (Sandbox Code Playgroud)

但从那里我可以告诉我,我没有得到我想要的页面,因为返回到html的是重定向消息,似乎要求我再次登录(?):

"\r\n\r\n<html>\r\n<head>\r\n    <title>Aplia</title>\r\n\t<script language=\"JavaScript\" type=\"text/javascript\">\r\n\r\n        top.location.href = \"https://courses.aplia.com/af/servlet/login?action=form&redirect=%2Fservlet%2Fmngstudents%3Fctx%3Dfilename\";\r\n    \r\n\t</script>\r\n</head>\r\n<body>\r\n    Click <a href=\"https://courses.aplia.com/af/servlet/login?action=form&redirect=%2Fservlet%2Fmngstudents%3Fctx%3Dfilename\">here</a> to continue.\r\n</body>\r\n</html>\r\n"
Run Code Online (Sandbox Code Playgroud)

虽然我确实认为,一旦表单成功发布(手动,在浏览器中),就会出现一系列重定向.如何判断表格是否正确发布?

我很确定,一旦我能使帖子正常工作,我就不会有任何问题指导R下载我需要的文件(本学期我500名学生的在线活动报告).但花了几个小时研究这个并陷入困境.也许我需要在RCurl包中设置更多与cookie有关的选项(因为网站确实使用了cookies)---?

任何帮助非常感谢!! 我通常使用R来处理统计数据,所以我对这些包和函数不熟悉.

SOC*_*ell 5

答案最终变得非常简单.出于某种原因,我没有看到需要包含的一个选项postForm:

html = postForm('https://courses.aplia.com/', .params = params, curl = curl, style="POST")
Run Code Online (Sandbox Code Playgroud)

就是这样......