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

python可以机械化处理HTTP身份验证吗?,python,mechanize,Python,Mechanize,Mechanize(Python)无法打开http摘要URL。我在谷歌上搜索并尝试调试,但没有成功 我的代码看起来像这样 import mechanize project = "test" baseurl = "http://trac.somewhere.net" loginurl = "%s/%s/login" % (baseurl, project) b = mechanize.Browser() b.add_password(baseurl, "user", "secret", "som

Mechanize(Python)无法打开http摘要URL。我在谷歌上搜索并尝试调试,但没有成功

我的代码看起来像这样

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)

Mechanize声称参数应该是uri、用户名和密码作为参数,但您有四个参数。urllib2.add_password有四个参数是正确的,但是第一个参数应该是领域,而不是uri

我会先尝试改变这一点

trac需要摘要吗?如果没有,下一步可能是尝试使用basic auth作为测试,以查看其是否有效,因为您可以仅使用addHeader添加它:

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

对于使用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)

失败意味着什么?是不是403失败了?其他一些错误或情况?trac是否配置为使用HTTP身份验证进行检查?或者你必须通过一个简单的HTML表单登录吗?看起来有些奇怪——你似乎正在导航到一个登录页面,而这个页面通常不会受到保护。使用basic/digest auth,您可以直接进入受保护的资源,在HTTP头中提供凭据(当然,mechanize会为您提供凭据)。最后一个参数是可选的:realm,默认为None。啊,好的。从没见过那个,医生也没提过。。。但是无论如何,你发现他只是在打开登录屏幕,所以这实际上根本不是一个身份验证错误。帮助->添加密码(self,url,user,password,realm=None)的mechanize方法。_mechanize.Browser实例第二个使用Twill的类似脚本效果很好。Twill反过来只使用mechanize。这不适用于http身份验证。这是当您登录的页面上有表单时。Http身份验证没有供其他人参考的表单,这可能已更改,也可能并非如此。在本例中,至少为mechanize 0.3.3提供
baseurl
,似乎会导致所有URL使用指定的凭据以该确切的baseurl开头。
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)