Frage

Ich habe Probleme, meine bietet immer auf mich ein, um eine MediaWiki im Intranet installieren. Ich glaube, dass es an die HTTP-Authentifizierung beruht das Wiki zu schützen.

Daten:

  1. Die Wiki-Wurzel ist: https://local.example.com/mywiki/
  2. Wenn das Wiki mit einem Web-Browser besuchen, ein Pop-up für Enterprise-Anmeldeinformationen zu fragen kommt (ich nehme an, dies ist HTTP-Authentifizierung)

Dies ist, was ich in meinem user-config.py haben:

mylang = 'en'
family = 'mywiki'
usernames['mywiki']['en'] = u'Bot'
authenticate['local.example.com'] = ('user', 'pass')

Das ist, was ich in mywiki_family.py haben:

# -*- 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'

Wenn ich ausführen login.py -v -v, bekomme ich diese:

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

(Ich bin nicht sicher, warum es hat 'local.example.com/w' anstelle von '/ mywiki').

Ich dachte, es könnte zu example.com statt example.com/wiki zu authentifizieren versuchen, so änderte ich die authenticate Zeile:

authenticate['local.example.com/mywiki'] = ('user', 'pass')

Aber dann bekomme ich eine HTTP 401.2 Fehler zurück von IIS:

  

Sie haben keine Berechtigung dieses Verzeichnis oder Seite mit den Anmeldeinformationen anzuzeigen, die Sie geliefert, weil Ihr Web-Browser ist ein WWW-Authenticate-Header-Feld senden, dass der Webserver nicht akzeptieren konfiguriert ist.

Jede Hilfe, wie man diese Arbeit bekommen würde geschätzt.

Aktualisieren Nach meiner Familie Datei Festsetzung es jetzt sagt:

  

Abrufen von Informationen für Website mywiki: en   ( 'Http error', 401, 'Unerlaubte',)   ACHTUNG: kann nicht geöffnet werden ‚ https: // local. example.com/mywiki/index.php?title=Non-existing_page&action=edit&useskin=monobook ‘. Vielleicht ist der Server oder die Verbindung nach unten. Erneuter Versuch in 1 Minute ...

schaute ich auf den HTTP-Header auf einem Plan urllib2.ulropen zu nennen und es ist mit WWW-Authenticate: Verhandeln WWW-Authenticate: NTLM. Ich vermute, urllib2 und damit pywikipedia dies nicht unterstützen?

Aktualisieren hinzugefügt, um Hilfe ein leckeres Prämie in immer dies funktioniert. Ich kann mit Python-ntlm authentifizieren. Wie integriere ich diese in pywikipedia?

War es hilfreich?

Lösung

Nun, die Tatsache, dass login.py versucht, Zugriff auf ‚\ w‘ anstelle von Ihrem Weg zeigt, dass es eine Familie Konfigurationsproblem ist.

ist Ihr Code eingerückt seltsam: ist scriptpath ein Mitglied der neuen Familie Klasse? wie in:

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'

Ich glaube, dass etwas mit Ihrer Familie Datei falsch ist. Eine gute Möglichkeit, zu überprüfen, ist in einer Python-Konsole zu tun:

import wikipedia
site = wikipedia.getSite('en', 'mywiki')
print site.login_address()

solange die relative Adresse falsch ist, zeigt ‚/ w‘ anstelle von ‚/ mywiki‘, bedeutet es, dass die Familiendatei noch nicht richtig konfiguriert ist, und dass der Bot wird nicht funktionieren:)

Aktualisieren : Wie ntlm in pywikipedia integrieren

Ich hatte nur einen Blick auf dem Grunde Beispiel hier . Ich würde den Code vor der Zeile in login.py integrieren:

response = urllib2.urlopen(urllib2.Request(self.site.protocol() + '://' + self.site.hostname() + address, data, headers))

Sie wollen etwas von dergleichen schreiben:

from ntlm import HTTPNtlmAuthHandler

user = 'DOMAIN\User'
password = "Password"
url = self.site.protocol() + '://' + self.site.hostname()

passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, url, user, password)
# create the NTLM authentication handler
auth_NTLM = HTTPNtlmAuthHandler.HTTPNtlmAuthHandler(passman)

# create and install the opener
opener = urllib2.build_opener(auth_NTLM)
urllib2.install_opener(opener)

response = urllib2.urlopen(urllib2.Request(self.site.protocol() + '://' + self.site.hostname() + address, data, headers))

Ich würde testen diese und integrieren es Code-Basis direkt in pywikipedia wenn ich nur einen verfügbaren NTLM-Setup hatte ...

Was auch immer geschieht, bitte nicht verschwinden mit Ihrer Lösung: Wir sind daran interessiert, bei pywikipedia, indem Sie Ihre Lösung:)

Andere Tipps

Ich vermute, das Problem, das Sie haben, ist, dass der Server die Standardauthentifizierung erwartet und Sie sind Handling nicht, dass in Ihrem Client. Michael Foord schrieb einen guten Artikel über den Umgang mit Standardauthentifizierung in Python .

Sie nicht genügend Informationen liefern, nicht für mich darüber sicher sein, also wenn das nicht funktioniert, wenden Sie sich bitte einige zusätzliche Informationen, wie Netzwerk-Dump Sie Verbindungsversuch geben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top