【发布时间】:2010-11-08 00:45:00
【问题描述】:
previous question 的答案表明 Nexus 实现了一个名为“NxBASIC”的custom authentication helper。
如何开始在 python 中实现处理程序?
更新:
按照 Alex 的建议实施处理程序看起来是正确的方法,但尝试从 authreq 中提取方案和领域失败。 authreq 的返回值为:
str: NxBASIC realm="Sonatype Nexus Repository Manager API""
AbstractBasicAuthHandler.rx.search(authreq) 只返回一个元组:
tuple: ('NxBASIC', '"', 'Sonatype Nexus Repository Manager API')
so scheme,realm = mo.groups() 失败。从我有限的正则表达式知识看来,来自 AbstractBasicAuthHandler 的标准正则表达式应该匹配方案和领域,但似乎不匹配。
正则表达式是:
rx = re.compile('(?:.*,)*[ \t]*([^ \t]+)[ \t]+'
'realm=(["\'])(.*?)\\2', re.I)
更新 2: 从 AbstractBasicAuthHandler 的检查来看,默认的处理是:
scheme, quote, realm = mo.groups()
更改为这个作品。我现在只需要针对正确的领域设置密码。谢谢亚历克斯!
【问题讨论】:
-
不幸的是,我无法解密给定的 Java 源代码以了解这与基本身份验证有何不同——如果有人解释这个“NxBasic”身份验证(它是如何与 Basic 不同,特别是!)。
-
与 HttpBasicHelper 的比较表明 HttpNxBasicHelper 是直接副本。唯一的区别似乎是 ChallengeScheme 的名称和描述。
-
是的,+1 表示成功!-) 不知道为什么我从标准库源中复制、粘贴和稍微编辑的代码只分配了 2 个需要 3 个的组(我没有触及那部分),但是为了完成解决方案,无论如何你都应该得到 +1!-)
-
我从 urllib2.py 的第 817 行得到了更改,也许你有不同的版本?无论哪种方式都可能值得编辑答案。再次感谢
标签: python restlet nexus httplib2