Как использовать R для загрузки заархивированного файла со страницы SSL, для которой требуются файлы cookie

Я пытаюсь загрузить файл со страницы https, для которой требуется нажать кнопку «Я согласен», а затем сохранить файл cookie. Мои извинения, если этот ответ где-то очевиден..

Когда я открываю веб-страницу прямо в Chrome и нажимаю «Я согласен», файл начинает загружаться автоматически.

http://www.icpsr.umich.edu/cgi-bin/bob/zipcart2?path=SAMHDA&study=32722&bundle=delimited&ds=1&dups=yes

Я попытался повторить этот пример , но я не думаю, что веб-сайт Hangseng действительно хранит файлы cookie/аутентификацию, поэтому я не знаю, должен ли этот пример быть всем, что мне нужно.

Кроме того, я считаю, что SSL усложняет аутентификацию, поскольку я думаю, что для вызова getURL() потребуется спецификация сертификата, например cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl"))

Я слишком новичок в RCurl, чтобы понять, сложный ли этот сайт или я просто упускаю что-то очевидное.

Спасибо!


person Anthony Damico    schedule 02.11.2012    source источник
comment
Этот URL-адрес из Rhelp может быть полезен: я сохранил его, но пока он мне не нужен: (ССЫЛКА)   -  person Tyler Rinker    schedule 03.11.2012


Ответы (1)


Это немного проще сделать с httr, потому что он настраивает все так, чтобы куки и https работали без проблем.

Самый простой способ создать файлы cookie — это сделать это за вас на сайте, вручную разместив информацию, которую генерирует форма «Я согласен». Затем вы делаете второй запрос на загрузку фактического файла.

library(httr)
terms <- "http://www.icpsr.umich.edu/cgi-bin/terms"
download <- "http://www.icpsr.umich.edu/cgi-bin/bob/zipcart2"

values <- list(agree = "yes", path = "SAMHDA", study = "32722", ds = "", 
  bundle = "all", dups = "yes")

# Accept the terms on the form, 
# generating the appropriate cookies
POST(terms, body = values)
GET(download, query = values)

# Actually download the file (this will take a while)
resp <- GET(download, query = values)

# write the content of the download to a binary file
writeBin(content(resp, "raw"), "c:/temp/thefile.zip")
person hadley    schedule 03.11.2012
comment
необработанный параметр приводит к тому, что content() ломается.. работает без него :) - person Anthony Damico; 03.11.2012