2012-11-02 33 views
6

Tôi đang cố gắng tải xuống tệp từ trang https yêu cầu nút "Tôi đồng ý" và sau đó lưu trữ cookie. Lời xin lỗi của tôi nếu câu trả lời này rõ ràng ở đâu đó ..Cách sử dụng R để tải xuống tệp nén từ trang SSL yêu cầu cookie

Khi tôi mở trang web trực tiếp trong Chrome và nhấp vào "Tôi đồng ý" - tệp bắt đầu tải xuống tự động.

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

Tôi cố gắng để tái tạo this example, nhưng tôi không nghĩ rằng trang web hangseng thực sự lưu trữ cookie/xác thực, vì vậy tôi không biết nếu ví dụ mà nên tất cả tôi cần.

Ngoài ra, tôi tin rằng SSL làm phức tạp việc xác thực, vì tôi nghĩ cuộc gọi getURL() sẽ yêu cầu đặc tả chứng chỉ như cainfo = system.file ("CurlSSL", "cacert.pem", package = "RCurl"))

Tôi quá nhiều người mới bắt đầu với RCurl để biết trang web này có khó hay không hoặc nếu tôi chỉ thiếu một điều gì đó hiển nhiên.

Cảm ơn bạn!

+0

url này từ Rhelp có thể hữu ích: Tôi đã lưu nhưng chưa cần: [(LINK)] (http://r.789695.n4.nabble.com/How-to-set -cookies-in-RCurl-td4632693.html) –

Trả lời

12

Việc này dễ dàng hơn khi thực hiện với httr vì thiết lập mọi thứ để cookie và https hoạt động liền mạch.

Cách dễ nhất để tạo cookie là để trang web làm điều đó cho bạn, bằng cách đăng thông tin thủ công mà biểu mẫu "Tôi đồng ý" tạo ra. Sau đó, bạn thực hiện yêu cầu thứ hai để tải xuống tệp thực.

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

thông số "thô" khiến nội dung() bị hỏng .. hoạt động mà không có nó :) –

+0

Tôi nghĩ rằng điều đó có nghĩa là bạn cần cập nhật số điện thoại – hadley

+0

của bạn. update.packages ('httr') đã làm điều đó :) –

Các vấn đề liên quan