Je n'arrive pas à faire en sorte que mon robot se connecte à une installation MediaWiki sur l'intranet. Je crois que c'est dû à l'authentification http protégeant le wiki.bot pywikipedia avec authentification https et http
faits:
- La racine wiki est: https://local.example.com/mywiki/
- Lorsque vous visitez le wiki avec un navigateur web, une fenêtre contextuelle apparaît en demandant des informations d'identification d'entreprise (je suppose que cela est l'authentification d'accès de base)
C'est ce que j'ai dans mon user-config.py:
mylang = 'en'
family = 'mywiki'
usernames['mywiki']['en'] = u'Bot'
authenticate['local.example.com'] = ('user', 'pass')
C'est ce que j'ai dans 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'
Lorsque j'exécute login.py -v -v, je reçois ceci:
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
(Je ne sais pas pourquoi il a ' . local.example.com/w » au lieu de «/mywiki »)
Je pensais qu'il pourrait essayer d'authentifier auprès example.com au lieu de example.com/wiki, alors j'ai changé la ligne de authentifier à:
authenticate['local.example.com/mywiki'] = ('user', 'pass')
Mais je reçois une erreur HTTP 401.2 retour de IIS:
Vous n'êtes pas autorisé à afficher ce répertoire ou une page en utilisant les informations d'identification que vous avez fournies parce que votre navigateur Web envoie un champ d'en-tête WWW-Authenticate que le serveur Web n'est pas configuré pour accepter.
Nous vous saurions gré de nous aider à obtenir ce résultat.
Mise à jour Après avoir résolu mon dossier de la famille, il dit maintenant:
Obtenir des informations pour le site mywiki: en ('erreur http', 401, 'non autorisée',) AVERTISSEMENT: Impossible d'ouvrir 'https://local.example.com/mywiki/index.php?title=Non-existing_page&action=edit&useskin=monobook'. Peut-être que le serveur ou votre connexion est en panne. Nouvelle tentative en 1 minutes ...
Je regardais les en-têtes HTTP sur un plan appel urllib2.ulropen et il utilise WWW-Authenticate: Negotiate WWW-Authenticate: NTLM. Je devine urllib2 et donc pywikipedia ne supporte pas cela?
Mise à jour Ajout d'une prime savoureuse pour obtenir de l'aide pour que cela fonctionne. Je peux m'authentifier en utilisant python-ntlm. Comment puis-je l'intégrer dans pywikipedia?
Qu'est-ce que happe ns quand vous grep pour ces messages d'erreur dans python/pywikipedia/vos bases de code? Cela indique-t-il une cause? – hughdbrown
vous avez juste besoin d'enregistrer un gestionnaire urlopener avant l'appel urllib2. Mise à jour ma réponse – NicDumZ