ボットがイントラネット上の MediaWiki インストールにログインするのに問題があります。ウィキを保護する http 認証によるものだと思います。
事実:
- wiki ルートはhttps://local.example.com/mywiki/です。
- Web ブラウザーで Wiki にアクセスすると、企業の資格情報を求めるポップアップが表示されます (これは基本的なアクセス認証だと思います)。
これは私の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」ではなく「local.example.com/w」になっている理由がわかりません。)
example.com/wiki ではなく example.com に対して認証しようとしているのではないかと考えたので、認証行を次のように変更しました。
authenticate['local.example.com/mywiki'] = ('user', 'pass')
しかし、IIS から HTTP 401.2 エラーが返されます。
Web サーバーが受け入れるように構成されていない WWW-Authenticate ヘッダー フィールドを Web ブラウザーが送信しているため、指定した資格情報を使用してこのディレクトリまたはページを表示する権限がありません。
これを機能させる方法についての助けをいただければ幸いです。
更新家族ファイルを修正した後、次のように表示されます。
サイト mywiki:en の情報を取得しています ('http エラー', 401, '無許可', ) 警告: 「https://local.example.com/mywiki/index.php?title=Non-existing_page&action=edit&useskin=を開けませんでした」モノブック」。サーバーまたは接続がダウンしている可能性があります。1 分後に再試行しています...
プランの urllib2.ulropen 呼び出しで HTTP ヘッダーを調べたところ、WWW-Authenticate: Negotiate WWW-Authenticate: NTLM を使用しています。私はurllib2を推測しているので、pywikipediaはこれをサポートしていませんか?
更新これを機能させるのに役立つおいしい報奨金を追加しました。python-ntlm を使用して認証できます。これをpywikipediaに統合するにはどうすればよいですか?