Ответ 1
Помимо сохранения 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
во все ваши запросы.