如何在使用 BaseHTTPServerRequestHandler
和 Cookie
时发送“Set-Cookie”标头? BaseCookie
及其子类不提供将值输出到传递到 send_header()
的方法,而 *Cookie.output()
不提供 HTTP 行分隔符。
我应该使用哪个 Cookie
类?有两种在 Python3 中仍然存在,它们有什么区别?
这将为每个Cookie发送一个Set-Cookie头
def do_GET(self):
self.send_response(200)
self.send_header("Content-type", "text/html")
cookie = http.cookies.SimpleCookie()
cookie['a_cookie'] = "Cookie_Value"
cookie['b_cookie'] = "Cookie_Value2"
for morsel in cookie.values():
self.send_header("Set-Cookie", morsel.OutputString())
self.end_headers()
...
C = http.cookie.SimpleCookie
来保存cookie,然后使用C.output()
来创建相应的标头。
这里有示例
请求处理程序有一个wfile
属性,它是套接字。req_handler.send_response(200, 'OK')
req_handler.wfile.write(C.output()) # you may need to .encode() the C.output()
req_handler.end_headers()
#write body...
self.wfile
,也不能写入self.send_header()
。 - Matt Joinerself.send_header('Set-Cookie', C.output(header=''))
可以使用。从这里得到的。
http://b.leppoc.net/2010/02/12/simple-webserver-in-python/很烦人的是,这在 http.server.html 或 http.cookies.html 的 Python 文档中都没有记录。 - ShannessSimpleCookie
来生成一个cookie对象。然后,我添加了一个值,并最终将其添加到要发送的标题列表中(作为Set-Cookie
字段),并使用通常的send_header
发送: def do_GET(self):
self.send_response(200)
self.send_header("Content-type", "text/html")
cookie = http.cookies.SimpleCookie()
cookie['a_cookie'] = "Cookie_Value"
self.send_header("Set-Cookie", cookie.output(header='', sep=''))
self.end_headers()
self.wfile.write(bytes(PAGE, 'utf-8'))
cookie.output
的参数非常重要:
header=''
确保不向生成的字符串添加任何标头(如果不这样做,它将生成一个以 Set-Cookie:
开头的字符串,这会导致在同一标头中有多个类似的字符串,因为 send_header
会添加自己的标头)。sep=''
不会产生最终分隔符。