2009-07-08 53 views
5

機械化(Python)401失敗,我打開http digest URL。我搜索並嘗試調試但沒有成功。python機械化可以處理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 2009-07-08 11:22:45

+0

trac是否配置爲使用HTTP身份驗證進行檢查?或者您是否必須通過簡單的HTML表單登錄? – 2009-07-08 11:54:12

+1

某些東西看起來很奇怪 - 您似乎在導航到登錄頁面,通常不會對其進行保護。通過基本/摘要認證,您可以直接訪問受保護的資源,在HTTP標頭中提供您的憑證(當然,這對您來說是機械化的)。 – 2009-07-08 12:04:39

回答

6

機械化宣稱參數應該是uri,用戶名和密碼作爲參數,但是您有四個參數。四個參數對於urllib2.add_password是正確的,但是第一個參數應該是領域,而不是uri。

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

我會嘗試先改變這種狀況。

Trac是否需要摘要?如果不是下一步可以嘗試使用基本身份驗證,作爲一個測試,看看是否能工作,因爲你可以添加一個以剛的addHeader:

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

最後一個參數是可選的:realm,默認爲None。 – 2009-07-08 12:03:11

+0

啊,好的。從來沒有見過這樣的人,文檔也沒有提及它......但無論如何,你會發現他只是打開登錄屏幕,事實上這根本不是認證錯誤。 – 2009-07-08 12:27:29

0

根據您的網絡自動化項目的複雜程度,可以考慮使用iMacros的。與機械化不同,它運行在網絡瀏覽器中,因此它可以與大多數開箱即用的網站一起使用。

我通過命令行(在我們的Linux服務器上)和iMacros Scripting Edition(通過Windows VMware上的Flash和Java網站)使用COM對象使用免費的Firefox插件。

命令行(免費軟件&開源):http://wiki.imacros.net/iMacros_for_Firefox#Command_Line_Support

COM對象(付費版需要):wiki.imacros.net/Python

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 
3

對於機械化HTTP認證您需要將完整的url提供給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)