2009-12-08 19 views
10

से लॉगिन फॉर्म सबमिट करें मेरे पास एक वेब पेज है जिसमें एक लॉगिन फॉर्म है जो HTTP के माध्यम से लोड होता है, लेकिन यह डेटा HTTPS के माध्यम से सबमिट करता है।मैकेनाइजेशन http से https

मैं इस साइट में लॉग इन करने के लिए पायथन-मशीनीकरण का उपयोग कर रहा हूं, लेकिन ऐसा लगता है कि डेटा HTTP के माध्यम से सबमिट किया जाता है।

मेरे कोड है इस तरह दिखता है:

import mechanize 
b = mechanize.Browser() 
b.open('http://site.com') 
form = b.forms().next() # the login form is unnamed... 
print form.action  # prints "https://login.us.site.com" 
form['user'] = "guest" 
form['pass'] = "guest" 
b.form = form 
b.submit() 

प्रपत्र प्रस्तुत किया जाता है, कनेक्शन हो जाने पर HTTP के माध्यम से और की तरह कुछ में शामिल हैं:

send: 'POST https://login.us.site.com/ HTTP/1.1\r\nAccept-Encoding: identity\r\nContent-Length: 180\r\nHost: login.us.site.com\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\n'... 

किसी को भी इस बात की पुष्टि कर सकते हैं और अंत में एक पोस्ट समाधान ताकि फॉर्म HTTPS के माध्यम से सबमिट किया गया हो?

बाद में संपादित करें:

1) मैं HTTP/HTTPS यातायात के लिए एक HTTP प्रॉक्सी का प्रयोग कर रहा हूँ (वातावरण में सेट - लिनक्स मशीन)
2) मैं Wireshark के साथ यातायात देखा है और मैं पुष्टि कर सकता कि यातायात सामान्य HTTP के माध्यम से भेजा जाता है (मैं POST की सामग्री देख सकता हूं और मशीनीज प्रॉक्सी को वेबब्रोसर के रूप में समान अनुरोध नहीं भेजता है - बाद में CONNECT login.us.site.com:443 भेजता है, जबकि केवल मशीनीकरण पोस्ट https://login.us.site.com)। हालांकि, मुझे नहीं पता कि डेटा के साथ क्या होता है क्योंकि यह प्रॉक्सी छोड़ देता है; शायद यह लक्ष्य साइट पर एक एसएसएल कनेक्शन स्थापित करता है?

+0

आपके प्रपत्र HTTPS के माध्यम से प्रस्तुत किया जा रहा है हो रहा है। – SilentGhost

+1

बाद के पाठकों के लाभ के लिए: - एक http url पर http पोस्ट पर एक पृष्ठ परोसने के लिए यह एक बुरा अभ्यास है। डिफ़ॉल्ट कॉन्फ़िगरेशन में IE (उदाहरण के लिए) ऐसे मामलों में चेतावनी उत्पन्न करेगा .... यदि यह आपके नियंत्रण में है तो आपको उसी होस्टनाम और प्रोटोकॉल से फ़ॉर्म को प्रस्तुत करना चाहिए क्योंकि इसे सबमिट किया जाएगा। यह उपयोगकर्ता को आश्वस्त पैडलॉक आइकन भी देता है। (यह मैन-इन-द-मिडल हमलों के खिलाफ एक बचाव है - यदि फॉर्म HTTP पर है, तो एमआईएम हमलावर फॉर्म को बदल सकता है और एचटीटीपीएस यूआरएल में जो भी सबमिट करता है उसे नियंत्रित करने के लिए जावास्क्रिप्ट इंजेक्ट कर सकता है)। – Ben

उत्तर

2

mechanize आंतरिक रूप से urllib2 का उपयोग करता है और बाद में एक बग था: HTTPS over (Squid) Proxy fails। बग पाइथन 2.6.3 में तय किया गया है, इसलिए पाइथन को अपडेट करने से आपकी समस्या हल होनी चाहिए।

+0

जबकि वह बग वास्तव में संबंधित दिखता है, मुझे संदेह है कि यह urllib2 की गलती है, क्योंकि पहले मैं पाइथन 2.6.4 (मेरे उबंटू वितरण में अद्यतित) चलाता हूं और दूसरा क्योंकि मैंने https: //www.paypal का अनुरोध करने वाला एक परीक्षण कार्यक्रम लिखा था। कॉम जो वास्तव में प्रॉक्सी के माध्यम से कनेक्ट भेजता है। तो यह मशीनी से संबंधित एक मुद्दा प्रतीत होता है .. – Unknown

+0

अजीब। मैं urllib2 का उपयोग कर रहा हूं और पेज पर urllib2.urlopen करने में सक्षम हूं, लेकिन मुझे urllib या mechanize का उपयोग करके एक ही त्रुटि मिलती है। – Vestel

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