https

2009-11-14 16 views
17

के माध्यम से किसी वेबसाइट पर लॉगिन करने के लिए रूबी स्क्रिप्ट का उपयोग करना ठीक है, तो यहां डीलियो है: मैं रूबी ऐप पर काम कर रहा हूं जो किसी वेबसाइट से डेटा लेगा, और उस डेटा को एक XML फ़ाइल में समेकित करेगा।https

जिस वेबसाइट को मुझे डेटा लेने की आवश्यकता है, उसके पास कोई एपीआई नहीं है जिसका उपयोग मैं कर सकता हूं, इसलिए केवल एक चीज जिसे मैं सोच सकता हूं, वेबसाइट पर लॉगिन करना है, अनुक्रमिक रूप से उन पृष्ठों को लोड करना जिनके पास मुझे आवश्यक डेटा है इस मामले में, पीएम; मैं उन्हें संग्रहित करना चाहता हूं), और फिर लौटाए गए HTML को पार्स करें।

समस्या यह है कि मुझे प्रोग्राम सत्र में लॉगिन सत्र का अनुकरण करने के किसी भी तरीके से नहीं पता है।

क्या किसी के पास कोई सलाह है, या किसी भी सिद्ध तरीके के बारे में पता है जिसे मैं सफलतापूर्वक https पृष्ठ पर लॉगिन करने के लिए उपयोग कर सकता हूं, और उसके बाद लॉगिन से अस्थायी कुकी सत्र का उपयोग कर साइट से पृष्ठों को प्रोग्राम लोड कर सकता हूं? यह रूबी-केवल समाधान नहीं होना चाहिए - मैं सिर्फ यह जानना चाहता हूं कि मैं वास्तव में यह कैसे कर सकता हूं। और यदि यह मदद करता है, तो प्रश्न वाली वेबसाइट वह है जो माइक्रोसॉफ्ट की .NET पासपोर्ट सेवा का उपयोग अपने लॉगिन/सत्र तंत्र के रूप में करती है।

इस मामले पर कोई भी इनपुट स्वागत है। धन्यवाद।

उत्तर

36

मशीनीकरण

मशीनीकरण माणिक पुस्तकालय जो एक वेब ब्राउज़र के व्यवहार imititates है। आप लिंक पर क्लिक कर सकते हैं, फॉर्म भरें और उन्हें सबमिट करें। यहां तक ​​कि इतिहास भी है और कुकीज़ को रिमूबर करता है। ऐसा लगता है कि मशीनीकरण की मदद से आपकी समस्या आसानी से सुलझाई जा सकती है।

निम्न उदाहरण http://mechanize.rubyforge.org से लिया जाता है:

require 'rubygems' 
require 'mechanize' 

a = Mechanize.new 
a.get('http://rubyforge.org/') do |page| 
    # Click the login link 
    login_page = a.click(page.link_with(:text => /Log In/)) 

    # Submit the login form 
    my_page = login_page.form_with(:action => '/account/login.php') do |f| 
    f.form_loginname = ARGV[0] 
    f.form_pw   = ARGV[1] 
    end.click_button 

    my_page.links.each do |link| 
    text = link.text.strip 
    next unless text.length > 0 
    puts text 
    end 
end 
+0

मैं सिर्फ यह प्रयोग किया जाता है एक समस्या मैं एक लंबे समय के लिए का सामना करना पड़ रहा है हल करने के लिए। धन्यवाद! – seaneshbaugh

+0

ग्रेट कॉल! मैं उस लिंक का पालन नहीं कर सका, लेकिन यहां अन्य बुनियादी उपयोग उदाहरण हैं: https://github.com/sparklemotion/mechanize/tree/master/examples –

+1

समस्या को हल करने के लिए कैसे कुछ वेबसाइट javascritp के बिना लॉगिन नहीं कर सकती है, मशीनीकरण जावास्क्रिप्ट का समर्थन नहीं करता है। –

0

आप पृष्ठ लाने के लिए wget का उपयोग करने का प्रयास कर सकते हैं। आप इस ऐप के साथ लॉगिन प्रक्रिया का विश्लेषण कर सकते हैं www.portswigger.net/proxy/।

0

इसके लायक होने के लिए, आप Webrat देख सकते हैं। इसका उपयोग स्वचालित स्वीकृति परीक्षणों के लिए एक उपकरण का उपयोग करना है, लेकिन मुझे लगता है कि आप लॉगिन फ़ील्ड भरने के अनुकरण के लिए इसका उपयोग कर सकते हैं, फिर उनके नामों से लिंक के माध्यम से क्लिक करें, और आवश्यक HTML को स्ट्रिंग के रूप में पकड़ लें। ऐसा कुछ भी करने की कोशिश नहीं की है, वैसे।