python机械化可以处理HTTP身份验证吗?

时间:2009-07-08 11:03:28

标签: python mechanize

Mechanize(Python)失败了401我打开http摘要网址。我用Google搜索并尝试调试但没有成功。

我的代码看起来像这样。

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)

4 个答案:

答案 0 :(得分:6)

Mechanize声称参数应该是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))))

答案 1 :(得分:4)

对于使用mechanize的http身份验证,您需要提供add_password方法的完整URL,而不仅仅是主机基地址。

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)

答案 2 :(得分: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 :(得分:0)

根据您的Web自动化项目的复杂程度,请考虑使用iMacros。与Mechanize不同,它在Web浏览器中运行,因此它适用于大多数开箱即用的网站。

我通过命令行(在我们的Linux服务器上)使用免费的Firefox插件和通过COM对象使用iMacros Scripting Edition(在Windows VMware上使用Flash和Java的网站)。

命令行(免费软件和开源):http://wiki.imacros.net/iMacros_for_Firefox#Command_Line_Support

COM对象(需要付费版本):wiki.imacros.net/Python