【问题标题】:Basic HTTP Authentication with python 3.2 (urllib.request)使用 python 3.2 (urllib.request) 的基本 HTTP 身份验证
【发布时间】:2011-07-07 03:34:21
【问题描述】:

这是我在这个帐户上的第一篇文章,上周我一直在努力让它发挥作用,所以我希望有人能帮助我让它发挥作用。

我试图从https://api.connect2field.com/ 中提取一些数据,但它拒绝了我所有来自 python 的身份验证尝试(虽然不是来自浏览器)。 我使用的代码

import urllib.request as url
import urllib.error as urlerror
urlp = 'https://api.connect2field.com/api/Login.aspx'

# Create an OpenerDirector with support for Basic HTTP Authentication...
auth_handler = url.HTTPBasicAuthHandler()
auth_handler.add_password(realm='Connect2Field API',
                          uri=urlp,
                          user='*****',
                          passwd='*****')
opener = url.build_opener(auth_handler)
# ...and install it globally so it can be used with urlopen.
url.install_opener(opener)
try:
    f = url.urlopen(urlp)
    print (f.read())
except urlerror.HTTPError as e:
        if hasattr(e, 'code'):
            if e.code != 401:
                print ('We got another error')
                print (e.code)
        else:
            print (e.headers)

我很确定代码做的一切都是正确的,这让我觉得也许还有 ASP.net 需要的另一个身份验证步骤。有人对 ASP.Net 的身份验证协议有任何经验吗?

我会整天检查这个帖子,所以如果需要,我可以发布更多信息。

编辑:我还尝试在家里运行的基本 http auth 服务器上运行我的脚本,它会进行身份验证,所以我很确定请求设置正确。

【问题讨论】:

  • 你能给出你得到的错误吗?特别是发回的标头?另外,您是否尝试使用 Wireshark 检查真正发送了哪些标头?
  • 我已经向 python 提交了一个错误请求。事实证明,如果在 auth 请求标头中没有引用领域,python 会默默地失败。修复包括将 'realm=(["\'])(.*?)\\2', re.I) 更改为 'realm=(["\']?)(["\']*)\\ 2', re.I) 在 AbstractBasicAuthHandler

标签: asp.net python-3.x basic-authentication


【解决方案1】:

似乎 IIS 被设置为进行基本身份验证,ASP.NET 很可能被配置为使用 Windows 身份验证。

正如您所说,身份验证是通过浏览器进行的,所以对您来说最好的选择是在通过浏览器连接时以及通过代码连接时使用诸如 fiddler 之类的工具来捕获请求/响应。比较它们以解决问题。

例如,我记得网站首先请求身份验证凭据然后重定向到提示输入不同凭据的不同 url 的情况。

【讨论】:

  • 目前看来,由于我的请求,他们正在对接受身份验证的方式进行一些更改。当网站恢复正常时,我会尝试捕获我的请求并发布我能获得的任何信息。感谢您的提示!
  • python 和 urllib.request 很难与 fiddler 一起工作。我尝试使用 proxy_handler 和 FancyURLOpener 手动添加代理,但无法从 fiddler 获取捕获。任何帮助将不胜感激。
  • @bantroth,尝试其他工具,例如 Firebug(Firefox 的附加组件)或 Wireshark!
  • 感谢 Vinay,原来 auth 标头格式不正确(没有在领域内包含引号)使用 fiddler 帮助很大
  • python 不接受系统代理,所以我不得不手动将代理添加到我的脚本中,然后提琴手像一个魅力一样工作
猜你喜欢
  • 1970-01-01
  • 2011-05-16
  • 2016-07-11
  • 1970-01-01
  • 2021-03-21
  • 2011-11-12
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多