У меня возникли проблемы с подключением моего бота к входу в MediaWiki для интранета. Я считаю, что это связано с http-аутентификацией, защищающей wiki.pywikipedia bot с https и http-аутентификацией
Факты:
- Корень вики: 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
(я не знаю, почему он имеет " . local.example.com/w»вместо„/ MyWiki“)
Я думал, что это, возможно, пытается проверить подлинность example.com вместо example.com/wiki, поэтому я изменил AUTHENTICATE строку:
authenticate['local.example.com/mywiki'] = ('user', 'pass')
Но тогда я получаю HTTP 401,2 ошибка назад от IIS:
У вас нет разрешения на просмотр этого каталога или страницы, используя учетные данные, поставляемые потому, что ваш веб-браузер посылает поле заголовка WWW-Authenticate что веб-сервер не настроен на прием.
Любая помощь в том, как получить эту работу, будет оценена по достоинству.
Update После исправления моей семьи файл, теперь он говорит:
Получение информации для сайта MyWiki: ан ('ошибка HTTP', 401 'Несанкционированное') ВНИМАНИЕ: Не удалось открыть 'https://local.example.com/mywiki/index.php?title=Non-existing_page&action=edit&useskin=monobook'. Возможно, сервер или ваше соединение не работает. Повторная попытка 1-й минуте ...
Я смотрел на HTTP заголовки на план urllib2.ulropen вызова и он использует WWW-Authenticate: согласование WWW-Authenticate: NTLM. Я угадываю urllib2, и поэтому pywikipedia не поддерживает это?
Обновление Добавлена вкусная награда за помощь в ее работе. Я могу аутентифицироваться с помощью python-ntlm. Как интегрировать это в pywikipedia?
Что Happe ns, когда вы grep для этих сообщений об ошибках в python/pywikipedia/your codebases? Означает ли это причину? – hughdbrown
вам просто нужно зарегистрировать обработчик urlopener перед вызовом urllib2. Обновлен мой ответ. – NicDumZ