“发送”;设置Cookie";在Python HTTP服务器中

“发送”;设置Cookie";在Python HTTP服务器中,python,http,cookies,Python,Http,Cookies,使用BaseHTTPServerRequestHandler和Cookie时,如何发送“Set Cookie”标头BaseCookie和子项不提供输出要传递到send_header()的值的方法,并且*Cookie.output()不提供HTTP行分隔符 我应该使用哪个Cookie类?有两个保存到Python3中,有什么区别?使用C=http.cookie.SimpleCookie保存cookie,然后使用C.output()为其创建头文件 请求处理程序有一个wfile属性,即套接字 req_

使用
BaseHTTPServerRequestHandler
Cookie
时,如何发送“Set Cookie”标头
BaseCookie
和子项不提供输出要传递到
send_header()
的值的方法,并且
*Cookie.output()
不提供HTTP行分隔符


我应该使用哪个
Cookie
类?有两个保存到Python3中,有什么区别?

使用
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...

我使用了下面的代码,它使用了
SimpleCookie
从为cookie生成对象。 然后,我向它添加一个值,最后,我将它添加到标题列表中 要使用通常的
send\u头发送(作为
Set Cookie
字段),请执行以下操作:

def do_GET(self):
自我发送_响应(200)
self.send_标题(“内容类型”、“文本/html”)
cookie=http.cookies.SimpleCookie()
cookie['a_cookie']=“cookie_值”
self.send_头(“设置Cookie”,Cookie.output(头=“”,sep=“”))
self.end_头()
self.wfile.write(字节(第页“utf-8”))
cookie.output
的参数很重要:

  • header=''
    确保不会将任何头添加到它生成的字符串中(如果不添加头,它将生成一个以
    Set Cookie:
    开头的字符串,这将导致在同一头中添加类似的字符串,因为
    send\u header
    将添加自己的头)
  • sep=''
    不产生最终分隔符

这会为每个Cookie发送一个设置的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()
        ...

@由于此发送不起作用,SimpleCookie不会输出完整的标题。当然,您需要添加更多的标题,而不仅仅是Cookie。。。我认为这是显而易见的。不,cookie的输出对写入处理程序中的
self.wfile
self.send\u header()
@Tor无效。我知道你给出的例子看起来不错,但如果你真的尝试一下,你就会明白我在说什么。
self.send\u header('Set-Cookie',C.output(header='')
有效。从这里得到的。恼人的是,这在http.server.html或http.cookies.html python文档中都没有记录。只有在一次只写入一个cookie时,这才有效。此答案应被接受。还有一些是不完整的。