2010-11-19 17 views
5

मैं पाइथन और मैकेनाइजेशन का उपयोग कर एक वेबसाइट में लॉग इन करने का प्रयास कर रहा हूं, हालांकि, जब मैं चाहता हूं कि पोस्ट डेटा प्राप्त करने का प्रयास करते समय मैं परेशानी में भाग रहा हूं।वेबसाइट पर पाइथन मैकेनाइजेशन

wget --quiet --save-cookies cookiejar --keep-session-cookies --post-data "action=login&login_nick=USERNAME&login_pwd=PASSWORD" -O outfile.htm http://domain.com/index.php 

प्रपत्र इस तरह दिखता है:

अनिवार्य रूप से मैं दोहराने के लिए इस का उपयोग करते हुए मशीनीकरण और अजगर चाहते

<login POST http://domain.com/index.php application/x-www-form-urlencoded 
    <TextControl(login_nick=USERNAME)> 
    <PasswordControl(login_pwd=PASSWORD)> 
    <CheckboxControl(login_auto=[1])> 
    <SubmitButtonControl(<None>=) (readonly)>> 

उचित मान सेट करना और फार्म सबमिट करने में समस्या नहीं है, लेकिन जो "action = login" -part को छोड़ देता है।

response = self.browser.open(self.url+"/index.php") 
self.browser.select_form(name="login") 

self.browser["login_nick"] = self.encoded_username 
self.browser["login_pwd"] = self.encoded_password 

self.browser.method = "POST" 

response = self.browser.open(self.browser.submit()) 

print (response.read()) 

अब सवाल है, मैं कैसे action=login हिस्सा जोड़ सकता हूँ है?

संपादित करें: ठीक है, तो मैं एक छिपी हुई फ़ील्ड कार्रवाई नामित और लॉगिन को मान सेट गयी। Wireshark के साथ टीसीपी धारा का विश्लेषण, POST डेटा वास्तव में जिस तरह से किया जाना चाहिए संरचित है। हालांकि, ऐसा लगता है कि मशीनीकरण मेरे urlencoding के साथ गड़बड़ कर रहा है (मैंने पहले से ही वर्णमाला के लिए मानों को urlencoded है कि वेबसाइट का उपयोग करता है)। उदाहरण के लिए, मेरे उपयोगकर्ता नाम में एक Å है - जिसे मैंने% C5 पर urlencoded किया है। हालांकि, जब इसे मशीनीकरण के साथ भेजा जाता है, तो यह% 25C5 के रूप में प्रदर्शित होता है। मैं तारों को बदलने से मशीनीकरण को कैसे रोकूं?

संपादित करें: मुझे एहसास हुआ कि नहीं बल्कि लड़ने से मशीनीकरण, मैं सिर्फ नहीं मेरी तार urlencode से पहले उन्हें भेजने सकता है। मामला समाप्त।

+0

अपने प्रश्न को संपादित करने और प्रश्न निकाय के जवाब जोड़ने के बजाय, आपको अपने प्रश्न का उत्तर पोस्ट करना चाहिए और फिर इसे स्वीकार करना चाहिए। यह इस तरह से * प्राकृतिक * है। – Felix

+2

मैंने किया। मैं इसे सिर्फ 2 दिनों के लिए स्वीकार नहीं कर सकता। –

उत्तर

8

मैकेनाइजेशन स्ट्रिंग्स को urlencode लगता है, इसलिए इसमें लड़ने में कोई बात नहीं है। यह अंतिम समाधान है (स्पष्ट रूप से वाक्य रचनात्मक रूप से वैध नहीं है, लेकिन उम्मीद है कि आपको विचार मिल जाएगा)।

import mechanize 

self.browser = mechanize.Browser() 
self.browser.open(self.url) 
self.browser.select_form(name="login") 

self.browser["login_nick"] = self.username 
self.browser["login_pwd"] = self.password 
self.browser.new_control("HIDDEN", "action", {}) 
control = self.browser.form.find_control("action") 
control.readonly = False 
self.browser["action"] = "login" 
self.browser.method = "POST" 
self.browser.action = self.url 

response = self.browser.submit() 
संबंधित मुद्दे