2009-07-08 8 views
5

मैकेनाइजेशन (पायथन) मेरे लिए http डाइजेस्ट यूआरएल खोलने के लिए 401 के साथ असफल रहा है। मैं googled और डीबगिंग की कोशिश की लेकिन कोई सफलता नहीं।पाइथन मैकेनाइजेशन हैंडल HTTP ऑथ कर सकते हैं?

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

import mechanize 

project = "test" 
baseurl = "http://trac.somewhere.net" 
loginurl = "%s/%s/login" % (baseurl, project) 
b = mechanize.Browser() 
b.add_password(baseurl, "user", "secret", "some Realm") 
b.open(loginurl) 
+0

असफल होने का मतलब क्या है? क्या यह 403 के साथ असफल रहा है? कुछ अन्य त्रुटि या हालत? – ars

+0

क्या HTTP प्रमाणीकरण के साथ जांचने के लिए trac कॉन्फ़िगर किया गया है? या क्या आपको एक साधारण HTML फॉर्म पर लॉगिन करना है? –

+1

कुछ अजीब दिखता है - आप एक लॉगिन पृष्ठ पर नेविगेट करते प्रतीत होते हैं, जिसे सामान्य रूप से संरक्षित होने की अपेक्षा नहीं की जाती है। मूल/डाइजेस्ट ऑथ के साथ आप सीधे सुरक्षित संसाधन पर जाते हैं, HTTP हेडर में आपके क्रेडेंशियल्स प्रदान करते हैं (जो आपके लिए मशीनीकृत करता है)। –

उत्तर

6

मशीनीकरण का दावा है कि पैरामीटर यूरी, उपयोगकर्ता नाम और पासवर्ड पैरामीटर के रूप में होना चाहिए, लेकिन आपके पास चार पैरामीटर हैं। चार पैरामीटर urllib2.add_password के लिए सही हैं, लेकिन फिर पहला पैरामीटर वास्तविक होना चाहिए, न कि यूरी।

http://wwwsearch.sourceforge.net/mechanize/

मुझे लगता है कि पहले बदलने की कोशिश होगी।

क्या ट्रैक को पाचन की आवश्यकता होती है? नहीं तो अगले कदम के बाद से आप सिर्फ addHeader साथ कि, जोड़ सकते हैं मूल प्रमाणीकरण का उपयोग कर एक परीक्षण के रूप कि अगर काम करता है देखने के लिए प्रयास करने के लिए हो सकता है:

import base64 
from mechanize import Browser 
browser = Browser() 
browser.addheaders.append(('Authorization', 'Basic %s' % base64.encodestring('%s:%s' % (user, pwd)))) 
+0

अंतिम पैरामीटर वैकल्पिक है: दायरे, किसी को भी डिफ़ॉल्ट नहीं। –

+0

आह, ठीक है। उसे कभी नहीं देखा, और दस्तावेज़ों का उल्लेख नहीं है ... लेकिन वैसे भी, आपने इस तथ्य को पकड़ लिया कि वह केवल लॉगिन स्क्रीन खोल रहा था, इसलिए वास्तव में यह प्रमाणीकरण त्रुटि नहीं है। –

+0

सहायता -> add_password (स्वयं, यूआरएल, उपयोगकर्ता, पासवर्ड, दायरे = कोई नहीं) mechanize._mechanize.Browser उदाहरण टवील का उपयोग कर दूसरी तरह की समान स्क्रिप्ट अच्छी तरह से काम करता है। बदले में टवील केवल मशीनीकरण का उपयोग करता है। – Shekhar

0

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

मैं कमांड लाइन (हमारे लिनक्स सर्वर पर) और आईएमएक्रोस स्क्रिप्टिंग संस्करण के माध्यम से COM ऑब्जेक्ट (फ्लैश और जावा के साथ विंडोज़ वीएमवेयर पर) के माध्यम से फ्री फ़ायरफ़ॉक्स एडन दोनों का उपयोग करता हूं।

कमांड लाइन (फ्रीवेयर & खुला स्रोत): http://wiki.imacros.net/iMacros_for_Firefox#Command_Line_Support

COM वस्तु (भुगतान संस्करण आवश्यक): wiki.imacros.net/Python

टिम

+0

दिलचस्प, हालांकि आवश्यकता के अनुसार, मुझे मौजूदा पायथन कार्यक्रम के भीतर निष्पादित कुछ चाहिए। – Shekhar

+0

यदि आप ब्राउज़र चलाने जा रहे हैं, तो सेलेनियम/वेबड्राइवर –

1
#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import mechanize 

a=mechanize.Browser() 
a.open("http://www.facebook.com/login.php") 
a.select_form(nr=0) #form number. 
a["email"]="mailaddress" 
a["pass"]="password" 
a.submit() 
print a 
+1

का उपयोग करें यह http प्रमाणीकरण के लिए नहीं है। यह तब होता है जब आप जिस पृष्ठ पर लॉग इन कर रहे हैं वह पृष्ठ पर एक रूप है। एचटीपी प्रमाणीकरण में कोई फॉर्म नहीं है – bluerubez

3

मशीनीकरण के साथ HTTP प्रमाणीकरण के लिए आपको add_password विधि को पूरा यूआरएल प्रदान करने की आवश्यकता है न केवल होस्ट बेस पता।

import mechanize 

project = "test" 
baseurl = "http://trac.somewhere.net" 
loginurl = "%s/%s/login" % (baseurl, project) 
b = mechanize.Browser() 
b.add_password(loginurl, "user", "secret", "some Realm") 
b.open(loginurl) 
+0

दूसरों के संदर्भ के लिए, यह या तो बदल गया है या ऐसा नहीं लगता है। इस उदाहरण में 'बेसुरल' प्रदान करना, कम से कम 0.3.3 मशीनीकरण के लिए, निर्दिष्ट प्रमाण-पत्रों का उपयोग करके उस सटीक बेसुरल से शुरू होने वाले सभी यूआरएल में परिणामस्वरूप दिखाई देता है। – kungphu

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

  • कोई संबंधित समस्या नहीं^_^