【问题标题】:Can python mechanize handle HTTP auth?python mechanize可以处理HTTP身份验证吗?
【发布时间】:2009-07-08 11:03:27
【问题描述】:

Mechanize (Python) 在打开 http 摘要 URL 时出现 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)

【问题讨论】:

  • 失败是什么意思? 403失败了吗?其他一些错误或情况?
  • trac 是否配置为使用 HTTP 身份验证进行检查?还是您必须通过简单的 HTML 表单登录?
  • 有些东西看起来很奇怪 - 您似乎正在导航到一个登录页面,而该页面通常不会受到保护。使用基本/摘要身份验证,您可以直接访问受保护的资源,在 HTTP 标头中提供您的凭据(当然,机械化会为您服务)。

标签: python mechanize


【解决方案1】:

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))))

【讨论】:

  • 最后一个参数可选:realm,默认为None。
  • 啊,好的。从来没有见过,文档也没有提到它......但无论如何,你发现他只是打开登录屏幕,所以这实际上根本不是身份验证错误。
  • help -> add_password(self, url, user, password, realm=None) mechanize._mechanize.Browser 实例的方法 其次,使用 Twill 的类似脚本效果很好。而斜纹则只使用机械化。
【解决方案2】:

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

【讨论】:

  • 供其他人参考,这要么已经改变,要么似乎并非如此。在这种情况下提供 baseurl,至少对于 mechanize 0.3.3,似乎会导致所有 URL 以使用指定凭据的确切 baseurl 开头。
【解决方案3】:
#!/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

【讨论】:

  • 这不适用于http认证。这是当您登录的页面在页面上有一个表单时。 Http认证没有表单
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
  • 2014-07-18
  • 2012-10-19
  • 2011-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多