在Python中访问带基本认证的网页

5 投票
1 回答
1820 浏览
提问于 2025-04-18 01:41

我正在尝试用 mechanize 连接一个网页,但遇到了 HTTP 401 错误。

这是我的代码:

import base64, mechanize

url = "http://www.dogus.edu.tr/dusor/FrmMain.aspx"
user = "user"
pwd = "pwd"

br = mechanize.Browser()
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]

br.add_password(url, user, pwd)
#br.addheaders.append(('Authorization', 'Basic %s' % base64.encodestring('%s:%s' % (user, pwd))))
print br.open(url).read()

我发现 add_passwordaddheaders 都没有起作用。这是因为我没有指定一个“领域”吗?我该怎么知道这个网页使用的是什么“领域”?我用的用户名和密码是正确的,因为我可以用这些信息在 Chrome 浏览器里登录。

1 个回答

3

你正在使用的这个示例页面需要进行 NTLM 认证。你可以通过查看返回的 HEADER 字段来确认这一点。例如,运行 curl -I http://www.dogus.edu.tr/dusor/FrmMain.aspx 会返回以下内容:

HTTP/1.1 401 Unauthorized
Content-Length: 1293
Content-Type: text/html
Server: Microsoft-IIS/7.0
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
X-Powered-By: ASP.NET
Date: Mon, 07 Apr 2014 21:24:09 GMT

其中 WWW-Authenticate: NTLM 这一行表示使用了哪种认证方式。我觉得这个问题的答案 使用 Python mechanize 登录需要 NTLM 认证的页面 会对你有帮助。

撰写回答