我无法让我的bot登录到Intranet上的MediaWiki安装。我相信这是由于保护wiki的http认证。使用https和http身份验证的pywikipedia bot
事实:
- 维基根源是:https://local.example.com/mywiki/
- 当访问一个网页浏览器维基,一个弹出出现,要求企业证书(我想这是基本的接入认证)
这是我在我的user-config.py:
mylang = 'en'
family = 'mywiki'
usernames['mywiki']['en'] = u'Bot'
authenticate['local.example.com'] = ('user', 'pass')
这是我在mywiki_family.py:
# -*- coding: utf-8 -*-
import family, config
# The Wikimedia family that is known as mywiki
class Family(family.Family):
def __init__(self):
family.Family.__init__(self)
self.name = 'mywiki'
self.langs = { 'en' : 'local.example.com'}
def scriptpath(self, code):
return '/mywiki'
def version(self, code):
return '1.13.5'
def isPublic(self):
return False
def hostname(self, code):
return 'local.example.com'
def protocol(self, code):
return 'https'
def path(self, code):
return '/mywiki/index.php'
当我执行login.py -v -v,我得到这个:
urllib2.urlopen(urllib2.Request('https://local.example.com/w/index.php?title=Special:Userlogin&useskin=monobook&action=submit', wpSkipCookieCheck=1&wpPassword=XXXX&wpDomain=&wpRemember=1&wpLoginattempt=Aanmelden%20%26%20Inschrijven&wpName=Bot, {'Content-type': 'application/x-www-form-urlencoded', 'User-agent': 'PythonWikipediaBot/1.0'})):
(Redundant traceback info here)
urllib2.HTTPError: HTTP Error 401: Unauthorized
(我不知道为什么它' )
我以为它可能试图验证example.com而不是example.com/wiki,所以我将认证行更改为:
authenticate['local.example.com/mywiki'] = ('user', 'pass')
但后来我得到一个HTTP从IIS 401.2错误回:
您没有权限使用您提供,因为您的Web浏览器发送一个WWW身份验证头字段的凭据查看该目录或网页Web服务器未配置为接受。
任何有关如何让这项工作的帮助,将不胜感激。
更新固定我的家人文件后,现在说:
获取信息的网站mywiki:恩 ( 'HTTP错误',401, '未授权') 警告:无法打开'https://local.example.com/mywiki/index.php?title=Non-existing_page&action=edit&useskin=monobook'。也许服务器或连接断开。重试以1分...
我看着一个计划urllib2.ulropen呼叫的HTTP标头和它使用WWW身份验证:协商WWW验证:NTLM。我猜urllib2,因此pywikipedia不支持这个?
更新增加了美味的赏金来帮助获得这项工作。我可以使用python-ntlm进行身份验证。我如何将它整合到pywikipedia中?
什么Happe的当你在Python/pywikipedia /你的代码库中grep这些错误信息?它是否指向一个原因? – hughdbrown 2009-08-11 14:10:03
你只需要在urllib2调用之前注册一个urlopener处理程序。更新了我的答案。 – NicDumZ 2009-08-14 08:03:53