10

パッケージでこのタスクを実行することについて最初にこの質問をしましたが、 . そのため、代わりに使用するコードを書き直しました。httrhttrRCurlwritefunction

32 ビット バージョンの R を使用して私の作業を再現できるはずなので、RAM に何かを読み込むとメモリ制限に達します。ハードディスクに直接ダウンロードするソリューションが必要です。

まず、このコードが機能します。圧縮されたファイルは適切にディスクに保存されます。

library(RCurl)
filename <- tempfile()
f <- CFILE(filename, "wb")
url <- "http://www2.census.gov/acs2011_5yr/pums/csv_pus.zip"
curlPerform(url = url, writedata = f@ref)
close(f)
# 2.1 GB file successfully written to disk

RCurl動作しないコードがいくつかあります。前の質問で述べたように、これを正確に再現するには、 ipumsで抽出を作成する必要があります。

your.email <- "email@address.com"
your.password <- "password"
extract.path <- "https://usa.ipums.org/usa-action/downloads/extract_files/some_file.csv.gz"

library(RCurl)

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

curl = getCurlHandle()

curlSetOpt(
    cookiejar = 'cookies.txt', 
    followlocation = TRUE, 
    autoreferer = TRUE, 
    ssl.verifypeer = FALSE,
    curl = curl
)

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

html <- postForm("https://usa.ipums.org/usa-action/users/validate_login", .params = params, curl = curl)
dl <- getURL( "https://usa.ipums.org/usa-action/extract_requests/download" , curl = curl)

ログインしたので、上記と同じコマンドを試してください。ただしcurl、Cookie を保持するオブジェクトを使用します。

filename <- tempfile()
f <- CFILE(filename, mode = "wb")

この改行--

curlPerform(url = extract.path, writedata = f@ref, curl = curl)
close(f)

# the error is:
Error in curlPerform(url = extract.path, writedata = f@ref, curl = curl) : 
  embedded nul in string: [[binary jibberish here]]

私の以前の投稿への回答は、このCレベルの書き込み機能の回答を参照していましたが、そのcurl_writer Cプログラムを再作成する方法についてはわかりません(Windowsで?)。

dyn.load("curl_writer.so")
writer <- getNativeSymbolInfo("writer", PACKAGE="curl_writer")$address
curlPerform(URL=url, writefunction=writer)

..または、この質問の上部にある 5 行のコードがgetNativeSymbolInfo.. curl認証/Cookieを保存し、SSLを検証しないように指示する追加のオブジェクトを渡すと、そうでなければ機能するコードが..壊れる理由がわかりませんか?

4

2 に答える 2