2012-11-02 10 views
6

Próbuję pobrać plik ze strony https, która wymaga przycisku "Zgadzam się", a następnie zapisuje plik cookie. Przepraszam, jeśli ta odpowiedź jest gdzieś oczywista ...Jak używać R do pobierania spakowanego pliku ze strony SSL wymagającej plików cookie

Kiedy otwieram stronę bezpośrednio w przeglądarce Chrome i klikam "Zgadzam się" - plik zacznie się automatycznie pobierać.

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

Starałem się replikować this example, ale nie sądzę, że strona hangseng faktycznie przechowuje plików cookie/uwierzytelnianie, więc nie wiem, czy to przykładem powinno być wszystko, czego potrzebuję.

Poza tym uważam, że SSL komplikuje uwierzytelnianie, ponieważ myślę, że wywołanie getURL() będzie wymagało specyfikacji certyfikatu, np. Cainfo = system.file ("CurlSSL", "cacert.pem", package = "RCurl"))

Jestem zbyt początkującym z RCurl, aby wiedzieć, czy ta strona jest dość trudna lub jeśli po prostu brakuje mi czegoś oczywistego.

Dziękujemy!

+0

ta url z rhelp mogą być użyteczne: uratowałem go, ale nie potrzebował go jeszcze: [(LINK)] (http://r.789695.n4.nabble.com/How-to-set -cookies-in-RCurl-td4632693.html) –

Odpowiedz

12

Jest to nieco łatwiejsze w wykonaniu z httr, ponieważ ustawia wszystko, aby pliki cookie i https działały bezproblemowo.

Najprostszym sposobem wygenerowania plików cookie jest wykonanie tej czynności przez witrynę poprzez ręczne opublikowanie informacji generowanych przez formularz "Zgadzam się". Następnie należy wykonać drugą prośbę o pobranie aktualnego pliku.

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") 
+0

Parametr "raw" powoduje, że content() do zerwania działa bez niego :) –

+0

Myślę, że to oznacza, że ​​musisz zaktualizować swoje httr – hadley

+0

yup. update.packages ('httr') to zrobił :) –