2013-04-06 10 views
13

Rさんを使用してで入手可能な所得動向ファイルのパネル研究を自動化しようとしています。これらのファイルをクリックすると、 〜this login/authentication pageまで。認証後、Webブラウザでファイルをダウンロードするのは簡単です。残念ながら、以下のコードhttrは認証を維持していないようです。私は、Login.aspxページ(as described here)のChromeのHeadersを検査しようとしましたが、すべての正しい値を渡していると確信しても、認証を維持することはできません。 httrまたはRCurlなどで完了した場合は気にしません。このスクリプトのユーザーに手動で、または完全に別のプログラムをダウンロードする必要はありません。 。これについての私の試みの1つは以下の通りですが、うまくいきません。どんな助けもありがとう。ありがとう!! :DログインしてからaspxウェブページからファイルをダウンロードするにはR

require(httr) 

values <- 
    list( 
     "ctl00$ContentPlaceHolder3$Login1$UserName" = "[email protected]" , 
     "ctl00$ContentPlaceHolder3$Login1$Password" = "somepassword" , 
     "ctl00$ContentPlaceHolder3$Login1$LoginButton" = "Log In" , 
     "_LASTFOCUS" = "" , 
     "_EVENTTARGET" = "" , 
     "_EVENTARGUMENT" = "" 
    ) 

POST("http://simba.isr.umich.edu/u/Login.aspx?redir=http%3a%2f%2fsimba.isr.umich.edu%2fZips%2fZipMain.aspx" , body = values) 

resp <- GET("http://simba.isr.umich.edu/Zips/GetFile.aspx" , query = list(file = "1053")) 
+0

認証後にクッキーを保存し、それ以降のすべての通話でそれを渡す必要があります。http://stackoverflow.com/a/15451157/564164 – daroczig

+0

@daroczigありがとう。私は実際にその1つを複製して昨日、それは動作しませんでした。 :(他の何かが起こっているかもしれませんか? –

答えて

9

ソリューション内の別の問題点がありました(私の上記のコメントを参照)、認証後にクッキーを保存する横:ASP.netサイトが予約されるクッキーにVIEWSTATEキーと値のペアを設定し、あなたの質問で - あなたがチェックすると、あなたの例でもログインすることができませんでした(POSTコマンドの結果は、ログイン方法に関する情報を保持しています。

可能な解決策の概要:

  1. ロードRCurlパッケージ:PAGをロード

    > curl = getCurlHandle() 
    > curlSetOpt(cookiejar = 'cookies.txt', followlocation = TRUE, autoreferer = TRUE, curl = curl) 
    
  2. :いくつかの便利なcurlオプションを設定し

    > library(RCurl) 
    
  3. :ユーザー名、パスワードVIEWSTATEようにパラメータを設定し

    > viewstate <- as.character(sub('.*id="__VIEWSTATE" value="([0-9a-zA-Z+/=]*).*', '\\1', html)) 
    
  4. VIEWSTATEをキャプチャするのは初めての電子:正規表現または他のツールとの

    > html <- getURL('http://simba.isr.umich.edu/u/Login.aspx', curl = curl) 
    
  5. エキスVIEWSTATE

    > params <- list(
        'ctl00$ContentPlaceHolder3$Login1$UserName' = '<USERNAME>', 
        'ctl00$ContentPlaceHolder3$Login1$Password' = '<PASSWORD>', 
        'ctl00$ContentPlaceHolder3$Login1$LoginButton' = 'Log In', 
        '__VIEWSTATE'         = viewstate 
        ) 
    
  6. 最後にログインします。

    > html = postForm('http://simba.isr.umich.edu/u/Login.aspx', .params = params, curl = curl) 
    

    おめでとうは、今あなたがログインしているとcurlはそれを検証クッキーを保持しています!ちょうどすべてのクエリにcurl = curlを渡すようにしてください - あなたが先に行くと、任意のファイルをダウンロードすることができ

    > grepl('Logout', html) 
    [1] TRUE 
    
  7. :あなたはログインしている場合

  8. を確認してください。

+2

yes !!!!!!!ありがとう!!ありがとう!:)ここでは、私が望むものを得るための最後の2行です: 'file < - getBinaryURL(" http://ファイル名は「ファイル名」、ファイル名は「c:/temp/thefile.zip」) –

+0

Cool、私はうれしいです。助けることができます。 – daroczig

+0

@daroczig私は別の.NETサイトで同様のクエリを持っています。私に新しいスレッドを開かせてもらいたいかどうか教えてください。 –

関連する問題