1

我已经使用Python中make_sever的方法创建了一个 WSGI 服务器。wsgiref.simple_server下面是启动服务器的代码。

port = 5000
httpd = make_server("localhost", port, Request_Handler)
print "Started Sever on port", str(port)
try :
    httpd.serve_forever()
except KeyboardInterrupt :
    print "Server Closed"

这是我的 Request_Handler 函数

def Request_Handler(environ, start_response):
count = 0
if environ["PATH_INFO"] == "/" :
    response_body = "No authentication required on root page"
    status = "200 OK"
    response_headers = [('Content-Type', 'text/plain'),
                        ('Content-Length', str(len(response_body)))]
    start_response(status, response_headers)
    return [response_body]

elif environ["PATH_INFO"] == '/AM-PM' :
    if authentication(environ.get('HTTP_AUTHORIZATION')) :
        print "Structure of HTTP_AUTHORIZATION IS :"
        print environ.get("HTTP_AUTHORIZATION")
        start_response('200 OK', [('Content-Type', 'text/plain')])
        return ["Authentication valid"]
    else :
        start_response('401 Unauthorized',
                       [('Content-Type', 'text/html'),
                       ('WWW-Authenticate', 'Basic realm="Login"')])
        count = count + 1
        return ["Please Try Again"]
        if count == 3:
            start_response('403 FORBIDDEN', [('Content-Type', 'text/plain'),('WWW-Authenticate', 'Basic realm="Login"')])
            return ["Authentication is invalid"]

早些时候,在该else块中,我只使用了 401 响应,它工作正常。每当有人输入错误的密码。我再次询问用户名和密码。但是现在我想要在 3 条路径之后。403响应启动并返回Authentication is invalid

我想使用一个count变量来计算无效请求的数量,一旦它增加到 3,就会启动 403 响应。

但是,当我使用此代码时,没有询问用户名和密码,而是以 200 响应开始,并打印Authentication is Valid出我不想要的消息。

我出错的任何建议

PS这是authentication我使用的功能

def authentication(header) :
if not header :
    return False
scheme, data = header.split(None, 1)
print "Scheme : ", scheme
print "Data : ", data
decoded = b64decode(data).decode('UTF-8')
print "Decoded : ", decoded
username, password = decoded.split(':', 1)
return username == password #True Statement 200 response will be started.
4

0 回答 0