在学习一节利用cook营销的课程,这个是写的代码
# cook营销
# coding=utf-8
from http.server import HTTPServer, BaseHTTPRequestHandler
from urllib.parse import parse_qs
from http import cookies
from html import escape as html_escape
form = """
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>小心,网站正在读取的信息</title>
</head>
<body>
<p>
{}
</p>
<form method="post">
<label>为了更好的服务,输入你的年龄
<input type="text" name="yourage">
</label>
<br>
<button type="submit">提交数据</button>
</form>
</body>
"""
class ageHandler(BaseHTTPRequestHandler):
def do_POST(self):
length = int(self.headers.get('Content-length', 0))
data = self.rfile.read(length).decode()
yourage = parse_qs(data)["yourage"][0]
c = cookies.SimpleCookie()
c['yourage'] = yourage
c['yourage']['domain'] = 'localhost'
c['yourage']['max-age'] = 100
self.send_response(303)
self.send_header('Location', '/')
self.send_header('Set-Cookie', c['yourage'].OutputString())
self.end_headers()
"""
这段代码是一个 Python HTTP 服务器的 do_POST 方法的一部分。
它从 HTTP 请求中读取 Content-length 头部,然后读取请求正文中的数据。
然后,它使用 parse_qs 函数从数据中解析出 yourage 参数的值。接下来,
它创建一个名为 yourage 的 cookie,并将其值设置为从请求中解析出的 yourage 值。
然后,它设置 cookie 的 domain 和 max-age 属性。最后,它发送一个 303 响应,将 Location 头部设置为 /,
并使用 Set-Cookie 头部将 cookie 发送回客户端。
简而言之,这段代码的作用是从 HTTP POST 请求中获取 yourage 参数的值,
并将其存储在一个 cookie 中,然后将 cookie 发送回客户端。
"""
def do_GET(self):
message = "你好,请输入你的年龄"
if 'cookie' in self.headers:
try:
c = cookies.SimpleCookie(self.headers['cookie'])
age = c["yourage"].values
if int(age) > 40:
message = "大于40岁"
elif int(age) > 25:
message = "大于25岁,小于40"
else:
message = "25岁以下"
except(KeyError, cookies.CookieError) as e:
message = "没有找到cook"
print(e)
self.send_response(200)
self.send_header("Content_type", 'text/html;charset=utf-8')
self.end_headers()
mesg = form.format(message)
self.wfile.write(mesg.encode("utf-8"))
if __name__ == '__main__': # 修改变量名
server_address = ('', 9999) # 监听端口
httpd = HTTPServer(server_address, ageHandler)
httpd.serve_forever() # 让程序运行下去
第一次打开网页是可以正常打开的
提交数据后,就一直报错,无法打开网页了
报错内容:TypeError: int() argument must be a string, a bytes-like object or a number, not 'builtin_function_or_method'
不理解的点,报错说int为空,但是我这里是加了异常处理模块的