У меня не получается заставить моего бота войти в систему для установки MediaWiki в интрасети. Я считаю, что это происходит из-за 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
(я не уверен, почему вместо «/mywiki» вместо «/mywiki» указано «local.example.com/w»).
Я подумал, что это может быть попытка аутентификации на example.com вместо example.com/wiki, поэтому я изменил строку аутентификации на:
authenticate['local.example.com/mywiki'] = ('user', 'pass')
Но затем я получаю ошибку HTTP 401.2 от IIS:
У вас нет разрешения на просмотр этого каталога или страницы с использованием предоставленных вами учетных данных, поскольку ваш веб-браузер отправляет поле заголовка WWW-Authenticate, которое веб-сервер не настроен для приема.
Буду признателен за любую помощь в получении этой работы.
Обновление После исправления файла моей семьи теперь написано:
Получение информации для сайта mywiki: en
(«Ошибка 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?