2012-11-02 3 views
6

Ich versuche, eine Datei von einer HTTPS-Seite herunterzuladen, für die ein "Ich stimme zu" -Button gedrückt werden muss, und speichert dann einen Cookie. Ich entschuldige mich, wenn diese Antwort irgendwo offensichtlich ist.Verwendung von R zum Herunterladen einer gezippten Datei von einer SSL-Seite, für die Cookies erforderlich sind

Wenn ich die Webseite direkt in Chrome öffnen und auf "Ich stimme zu" klicken - die Datei wird automatisch heruntergeladen.

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

Ich versuchte this example zu replizieren, aber ich glaube nicht, dass hangseng Website tatsächlich speichert das Cookie/Authentifizierung, so dass ich weiß nicht, ob das Beispiel alles was ich brauche sein sollte.

Darüber hinaus glaube ich, dass die SSL die Authentifizierung erschwert, da ich denke, der getURL() Aufruf wird eine Zertifikats-Spezifikation wie cainfo = system.file ("CurlSSL", "cacert.pem", package = "RCurl")))

Ich bin zu viel Anfänger mit RCurl, um zu wissen, ob diese Website ziemlich schwierig ist oder wenn ich nur etwas Offensichtliches vermisse.

Vielen Dank!

+0

Diese URL von rhelp kann nützlich sein: Ich kann es gespeichert haben, aber es noch nicht erforderlich: [(LINK)] (http://r.789695.n4.nabble.com/How-to-set -cookies-in-RCurl-td4632693.html) –

Antwort

12

Dies ist ein bisschen einfacher zu tun mit httr, weil es alles eingerichtet, so dass Cookies und https nahtlos funktionieren.

Die einfachste Möglichkeit zum Generieren der Cookies besteht darin, dass die Website dies für Sie erledigt, indem Sie manuell die Informationen posten, die das Formular "Ich stimme zu" generiert. Anschließend führen Sie eine zweite Anforderung zum Herunterladen der eigentlichen Datei aus.

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

der "rohe" Parameter bewirkt, dass Inhalt() zu brechen .. funktioniert ohne es :) –

+0

Ich denke, das bedeutet, dass Sie Ihre HTR – hadley

+0

Yup aktualisieren müssen. update.packages ('httr') hat es geschafft :) –

Verwandte Themen