Python mechanize能处理HTTP认证吗?

6 投票
3 回答
9192 浏览
提问于 2025-04-15 12:45

我在用Python的Mechanize库打开需要HTTP摘要认证的链接时,遇到了401错误。虽然我在网上查了很多资料并尝试调试,但还是没有解决这个问题。

我的代码大概是这样的。

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)

3 个回答

0

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或者库的时候。比如说,当你在使用某个库的功能时,可能会发现它的表现和你预期的不一样。这时候,你可能会去查找一些资料,看看有没有人遇到过类似的问题。

在StackOverflow上,很多人会分享他们的经验和解决方案。你可以看到他们提问的方式,通常会描述他们遇到的问题,提供一些相关的代码,甚至会说明他们尝试过的解决办法。这些信息对于其他人来说非常有帮助,因为大家可以从中学习到如何解决类似的问题。

总之,StackOverflow是一个很好的地方,可以让你找到编程中遇到的问题的答案,同时也能帮助你更好地理解一些技术概念。

#!/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
4

在使用mechanize进行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)
6

Mechanize 说需要的参数是 uri、用户名和密码,但你有四个参数。四个参数对于 urllib2.add_password 来说是对的,但第一个参数应该是 realm,而不是 uri。

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

我建议你先试着改一下第一个参数。

trac 是否需要使用 digest 认证?如果不需要,下一步可以试试用基本认证,作为测试看看能不能成功,因为你可以通过 addHeader 来添加这个认证:

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

撰写回答