我在Python中使用make_sever
wsgiref.simple_server
方法创建了一个WSGI服务器。以下是启动服务器的代码。
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响应。
但是,当我使用此代码时,不会询问用户名和密码,而是以Authentication is Valid
的打印消息启动200响应,这不是我想要的。
我出错的任何建议
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.