urllib2 grundlegende Authentifizierung oddites

8

Ich knalle meinen Kopf gegen die Wand mit diesem. Ich habe jedes Beispiel versucht und jedes letzte Bit gelesen, das ich online über die grundlegende http-Autorisierung mit urllib2 finden kann, aber ich kann nicht herausfinden, was meinen spezifischen Fehler verursacht.

Zu der Frustration kommt hinzu, dass der Code nur für eine Seite und nicht für eine andere Seite funktioniert. Einloggen in www.mysite.com/adm geht absolut reibungslos. Es authentifiziert kein Problem. Aber wenn ich die Adresse zu "http://mysite.com/adm/items.php?n=201105&c=200" ändere, erhalte ich diesen Fehler:

%Vor%

Die Suche nach google hat zu null Informationen über diesen Fehler geführt.

Das Adm ist eine Frameset-Seite, ich bin mir nicht sicher, ob das überhaupt relevant ist.

Hier ist der aktuelle Code:

%Vor%

Dies ist nur eine der vielen Versionen, die ich ausprobiert habe. Ich habe jedes Beispiel von Urlib2 Missing Manual gefolgt, aber immer noch den gleichen Fehler erhalten.

Kann jemand darauf hinweisen, was ich falsch mache?

    
Zack 03.02.2011, 05:46
quelle

4 Antworten

2

Vor ungefähr einem Jahr ging ich durch denselben Prozess und dokumentierte, wie ich das Problem gelöst habe - Der direkte und einfache Weg zur Authentifizierung und zum Standard. Wählen Sie, was Sie für richtig halten.

HTTP-Authentifizierung in Python

Es gibt eine erklärende Beschreibung im fehlenden urllib2-Dokument .

>     
Lakshman Prasad 03.02.2011, 07:39
quelle
3

Laufen Sie heute zu einem ähnlichen Problem. Ich verwendete die Standardauthentifizierung für die von mir entwickelte Website und konnte keine Benutzer authentifizieren.

Hier sind ein paar Dinge, die Sie verwenden können, um Ihr Problem zu debuggen:

  1. Ich habe slumber.in und Ссылка zu Testzwecken. Ich habe beide von ipython Shell ausgeführt, um zu sehen, welche Antworten ich erhielt.
  2. Slumber benutzt tatsächlich httplib2 unter den Deckeln, so dass sie sich ähnlich verhalten. Ich benutzte tcpdump und später tcpflow (der Informationen in einer viel besser lesbaren Form anzeigt), um zu sehen, was wirklich gesendet und empfangen wurde. Wenn Sie eine GUI möchten, finden Sie unter Wireshark oder Alternativen.
  3. Ich habe meine Website mit curl getestet und als ich curl mit meinem Benutzernamen / Passwort benutzt habe, hat es richtig funktioniert und die gewünschte Seite angezeigt. Aber Schlummer und httplib2 funktionierten immer noch nicht.
  4. Ich habe meine Website und browserspy.dk getestet, um zu sehen, worin die Unterschiede bestehen. Wichtig ist, dass die Website von browserspy für die Standardauthentifizierung funktioniert und meine Website nicht, also könnte ich die beiden vergleichen. Ich habe an vielen Stellen gelesen, dass Sie HTTP 401 Not Authorized senden müssen, damit der Browser oder das von Ihnen verwendete Tool den von Ihnen angegebenen Benutzernamen / das Passwort senden kann. Aber was ich nicht wusste war, dass Sie auch das WWW-Authenticate-Feld in der Kopfzeile benötigten. Das war also das fehlende Stück.
  5. Was diese ganze Situation merkwürdig gemacht hat, war, dass ich während des Tests sehen würde, dass httplib2 grundlegende Authentifizierungsheader mit den meisten Anfragen sendet (tcpflow würde das anzeigen). Es stellt sich heraus, dass die Bibliothek bei der ersten Anfrage keine Benutzername / Passwort-Authentifizierung sendet. Wenn "Status 401" UND "WWW-Authenticate" in der Antwort enthalten ist, werden die Berechtigungsnachweise ab der zweiten Anforderung und alle Anforderungen an diese Domäne von nun an gesendet.

Zusammenfassend lässt sich sagen, dass Ihre Anwendung zwar korrekt ist, Sie aber möglicherweise nicht die Standardkopfzeilen und den Statuscode für den Client zum Senden der Anmeldeinformationen zurückgeben. Verwenden Sie Ihre Debug-Tools, um herauszufinden, welche welche ist. Außerdem gibt es einen Debug-Modus für httplib2, setzen Sie einfach httplib2.debuglevel=1 , so dass Debug-Informationen auf der Standardausgabe ausgegeben werden. Dies ist viel hilfreicher als tcpdump zu verwenden, da es auf einer höheren Ebene ist.

Hoffe das hilft jemandem.

    
tayfun 13.10.2011 13:43
quelle
1

Aus dem von Ihnen geposteten HTML geht es nach wie vor davon aus, dass Sie sich erfolgreich authentifizieren, aber bei der Verarbeitung Ihrer POST-Anfrage später einen Fehler feststellen. Ich habe versucht, Ihre URL und fehlgeschlagen Authentifizierung, ich bekomme eine Standard 401 Seite.

In jedem Fall schlage ich vor, dass Sie erneut versuchen, Ihren Code auszuführen und dieselbe Operation manuell in Firefox auszuführen, nur diesmal mit Wireshark, um den Austausch zu erfassen. In beiden Fällen können Sie den vollständigen Text der HTTP-Anfrage und Antwort abrufen und die Unterschiede vergleichen. In den meisten Fällen führt das zu der Quelle des Fehlers, den Sie bekommen.

    
jd. 03.02.2011 08:28
quelle
0

Ich fand auch, dass das Passwort nicht funktioniert (manchmal?). Das Hinzufügen des base64 user / pass headers gemäß dieser Antwort Ссылка hat für mich funktioniert. Ich greife auf die URL von jenkins wie folgt zu: http: /// job // lastCompletedBuild / testReport / api / python

Das funktioniert für mich:

%Vor%

Dies funktioniert nicht für mich, Fehler 403 jedes Mal: ​​

%Vor%     
gaoithe 19.01.2017 15:30
quelle

Tags und Links