2013-04-06 91 views
13

मैं फ़ाइलें उपलब्ध आय गतिशीलता के पैनल अध्ययन के डाउनलोड को स्वचालित कोशिश कर रहा हूँ के साथ aspx वेब पृष्ठों से एक फ़ाइल डाउनलोड this login/authentication page के माध्यम से। प्रमाणीकरण के बाद, अपने वेब ब्राउज़र के साथ फ़ाइलों को डाउनलोड करना आसान है। दुर्भाग्यवश, नीचे httr कोड प्रमाणीकरण को बनाए रखने के लिए प्रतीत नहीं होता है। मैंने login.aspx पृष्ठ (as described here) के लिए क्रोम में Headers का निरीक्षण करने का प्रयास किया है, लेकिन यह मानता है कि प्रमाणीकरण को बनाए रखने के लिए प्रतीत नहीं होता है, भले ही मुझे विश्वास है कि मैं सभी सही मानों में गुजर रहा हूं। मुझे परवाह नहीं है कि यह httr या RCurl या कुछ और के साथ किया गया है, तो मुझे कुछ ऐसा लगता है जो आर के अंदर काम करता है, इसलिए मुझे इस स्क्रिप्ट के उपयोगकर्ताओं को मैन्युअल रूप से या कुछ पूरी तरह से अलग प्रोग्राम के साथ डाउनलोड करने की आवश्यकता नहीं है । इस पर मेरे प्रयासों में से एक नीचे है, लेकिन यह काम नहीं करता है। किसी भी सहायता की सराहना की जाएगी। धन्यवाद!! : डीलॉगइन करने के लिए कैसे और फिर आर क्लिक करने का उपयोग कर उन फ़ाइलों के किसी भी उपयोगकर्ता लेता है पर <a href="http://simba.isr.umich.edu/Zips/ZipMain.aspx" rel="nofollow noreferrer">this web page</a> पर आर

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 धन्यवाद .. मैंने वास्तव में उस कल को दोहराने की कोशिश की, यह काम नहीं किया। :(क्या कुछ और हो रहा है? –

उत्तर

9

बगल में प्रमाणीकरण के बाद कुकी भंडारण (मेरे ऊपर टिप्पणी देखें) अपने समाधान में एक और समस्या पैदा करने वाले मतलब नहीं था: ASP.net साइट कुकी जो आरक्षित किया जाना है में एक VIEWSTATE कुंजी-मान पेयर सेट आपके प्रश्नों में - यदि आप जांचते हैं, तो आप अपने उदाहरण में भी लॉगिन नहीं कर पाएंगे (POST कमांड का परिणाम लॉगिन करने के तरीके के बारे में जानकारी रखता है, बस इसे जांचें)।

एक संभव समाधान की एक रूपरेखा:

  1. लोड RCurl पैकेज:

    > library(RCurl) 
    
  2. सेट कुछ आसान curl विकल्प:

    > curl = getCurlHandle() 
    > curlSetOpt(cookiejar = 'cookies.txt', followlocation = TRUE, autoreferer = TRUE, curl = curl) 
    
  3. लोड पग पहली बार के लिए ई VIEWSTATE कब्जा करने के लिए:

    > html <- getURL('http://simba.isr.umich.edu/u/Login.aspx', curl = curl) 
    
  4. निकालें VIEWSTATE एक रेगुलर एक्सप्रेशन या किसी अन्य उपकरण के साथ:

    > viewstate <- as.character(sub('.*id="__VIEWSTATE" value="([0-9a-zA-Z+/=]*).*', '\\1', html)) 
    
  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 कि पुष्टि करने कुकी रखती है!

  7. सत्यापित करें यदि आप लॉग इन हैं:

    > grepl('Logout', html) 
    [1] TRUE 
    
  8. तो तुम आगे जाना है और किसी भी फाइल डाउनलोड कर सकते हैं - बस आपके सभी प्रश्नों में curl = curl पारित करने के लिए सुनिश्चित करें।

+2

हाँ !!!!!!! यह काम करता है। धन्यवाद !! :) मैं जो चाहता था उसे प्राप्त करने के लिए यहां दो अंतिम पंक्तियां हैं: 'फ़ाइल <- getBinaryURL ("http: // simba.isr.umich.edu/Zips/GetFile.aspx?file=1053 ", curl = curl)' और 'writeBin (फ़ाइल, "c: /temp/thefile.zip") ' –

+0

कूल, मुझे खुशी है कि मैं खुश हूं मदद कर सका। – daroczig

+0

@daroczig मेरे पास एक अलग .NET साइट के साथ एक समान क्वेरी है। अगर आप मुझे एक नया धागा खोलना चाहते हैं तो कृपया मुझे बताएं। –

संबंधित मुद्दे

 संबंधित मुद्दे