2013-06-25 24 views
6

我試圖下載一個文件,該文件是1.1千兆字節與httr但我打了以下錯誤時:HTTR GET功能運行的空間下載大文件

x <- GET(extract.path) 
Error in curlPerform(curl = handle$handle, .opts = curl_opts$values) : 
    cannot allocate more space: 1728053248 bytes 

我的C盤有400GB免費..

RCurl

,我看到maxfilesizemaxfilesize.large選擇使用getCurlOptionsConstants()時,但我不明白,如果/如何將這些可能是通過configset_config傳遞給httr ..或者,如果我需要切換到RCurl爲此..即使我確實需要切換,將增加最大文件大小的工作?

這裏是我的sessionInfo ..

> sessionInfo() 
R version 3.0.0 (2013-04-03) 
Platform: i386-w64-mingw32/i386 (32-bit) 

locale: 
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252 LC_NUMERIC=C       LC_TIME=English_United States.1252  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] XML_3.96-1.1 httr_0.2  

loaded via a namespace (and not attached): 
[1] digest_0.6.0 RCurl_1.95-4.1 stringr_0.6.2 tools_3.0.0 

..和(不建議這樣做,只是因爲它會帶你一段時間)如果你想重現我的錯誤,你可以去https://usa.ipums.org/usa-action/samples,註冊一個新帳戶,選擇2011年5年acs摘錄,添加約一百個變量,然後等待摘錄準備就緒。然後編輯前三行並運行下面的代碼。 (再次,不建議

your.email <- "[email protected]" 
your.password <- "password" 
extract.path <- "https://usa.ipums.org/usa-action/downloads/extract_files/some_file.csv.gz" 

require(httr) 

values <- 
    list(
     "login[email]" = your.email , 
     "login[password]" = your.password , 
     "login[is_for_login]" = 1 
    ) 

POST("https://usa.ipums.org/usa-action/users/validate_login" , body = values) 
GET("https://usa.ipums.org/usa-action/extract_requests/download" , query = values) 

# this line breaks 
x <- GET(extract.path) 

回答

1

GET電話httr:::make_request這臺在config = list()定義的捲曲選項。但是它出現在writefunction otpion在「HTTR」

opts$writefunction <- getNativeSymbolInfo("R_curl_write_binary_data")$address 

您可能需要使用RCurl並確定適當的`WRITEFUNCTION」硬編碼。來自@Martin Morgan的以下 解決方案Create a C-level file handle in RCurl for writing downloaded files似乎是要走的路。

+0

謝謝!我認爲我更接近答案,但它仍然不起作用。我已經把所有的代碼從'httr'移到'RCurl',並且包含了@Martin Morgan的一些答案,因爲它現在有很大的不同,我寫了[這個新問題](http://stackoverflow.com/問題/ 17329288 /如何下載一個大的二進制文件與rcurl服務器後認證)..我不認爲有'httr'的解決方案? –

+0

請提交一個bug - httr應該可以做到這一點(雖然它不會默認) – hadley

+0

完成。謝謝@hadley –