Ich stehe fest, versuchen, einen Python-basierten Webserver zu arbeiten.Bei Python HTTP Server mit Standard-Authentifizierung mit BaseHTTP stecken
Ich möchte Basic-Authentifizierung (Senden einer 401-Header) und authentifizieren mit einer Liste von Benutzern. Ich habe keine Probleme beim Senden der 401-Antwort mit "WWW-Authorize" -Header, ich kann die Benutzerantwort validieren (base64 codierte Benutzername & Passwort), jedoch erscheint die Login-Box nach erfolgreicher Validierung Pop-up.
import SimpleHTTPServer
import SocketServer
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
class Handler(BaseHTTPRequestHandler):
''' Main class to present webpages and authentication. '''
def do_HEAD(self):
print "send header"
self.send_response(401)
self.send_header('WWW-Authenticate', 'Basic realm=\"Test\"')
self.send_header('Content-type', 'text/html')
self.end_headers()
def do_GET(self):
''' Present frontpage with user authentication. '''
self.do_HEAD()
if self.headers.getheader('Authorization') == None:
self.wfile.write('no auth header received')
pass
elif self.headers.getheader('Authorization') == 'Basic dGVzdDp0ZXN0':
self.wfile.write(self.headers.getheader('Authorization'))
self.wfile.write('authenticated!')
pass
else:
self.wfile.write(self.headers.getheader('Authorization'))
self.wfile.write('not authenticated')
pass
httpd = SocketServer.TCPServer(("", 10001), Handler)
httpd.serve_forever()
if __name__ == '__main__':
main()
Auf den ersten Last (http: // localhost: 10001) die loginbox erscheint, ich geben Sie Test, Test (der richtige Benutzer) Benutzer ok validiert, aber Feld erscheint wieder auf, wenn ich auf Abbrechen klicken, Ich komme auf die validierte Seite ...
Kann mir hier jemand helfen? Ich vermute, dass es etwas damit zu tun hat, dass die Autorisierung unter do_GET stattfindet, was jedes Mal ausgelöst wird, wenn eine Seite geladen wird.
brilliant! nett und einfach – Claudiu