Python http服务器-can';我不读饼干
我制作了python服务器,我想创建、发送和接收cookie。我在接收它们时遇到了问题,当我在Chrome上访问它时,我可以看到cookie被创建了。我读到它应该出现在os.environ中,但它从来没有出现过。这是我的密码:Python http服务器-can';我不读饼干,python,http,cookies,server,Python,Http,Cookies,Server,我制作了python服务器,我想创建、发送和接收cookie。我在接收它们时遇到了问题,当我在Chrome上访问它时,我可以看到cookie被创建了。我读到它应该出现在os.environ中,但它从来没有出现过。这是我的密码: import os import time import Cookie import BaseHTTPServer from multiprocessing import Process from SocketServer import ThreadingMixIn fr
import os
import time
import Cookie
import BaseHTTPServer
from multiprocessing import Process
from SocketServer import ThreadingMixIn
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_GET(s):
#creating cookie
c = Cookie.SimpleCookie()
c['api'] = 'token'
c['api']['expires'] = 3*60*60
s.send_response(200)
#sending cookie
s.wfile.write(c)
s.wfile.write('\r\n')
s.send_header("Access-Control-Allow-Origin", "*")
s.send_header("Access-Control-Expose-Headers", "Access-Control-Allow-Origin")
s.send_header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept")
s.end_headers()
#reading cookies
if 'HTTP_COOKIE' in os.environ:
cookie_string = os.environ.get('HTTP_COOKIE')
c = Cookie.SimpleCookie()
c.load(cookie_string)
try:
data=c['api'].value
print "cookie data: "+data
except:
print "The cookie was not set or has expired"
else:
print 'The cookie was not set'
class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
''
if __name__ == '__main__':
httpd = ThreadedHTTPServer(('', 8666), MyHandler)
print time.asctime(), "Server Starts - %s:%s" % (HOST_NAME, PORT_NUMBER)
try:
httpd.serve_forever()
except KeyboardInterrupt:
pass
httpd.server_close()
print time.asctime(), "Server Stops - %s:%s" % (HOST_NAME, PORT_NUMBER)
在我访问我的网站后,cookie正在创建中,但os.environ中从来没有HTTP_cookie。供未来读者参考: 以下是如何在python3中解析Cookie:
from http.server import BaseHTTPRequestHandler
from http.cookies import SimpleCookie
class MyHandler(BaseHTTPRequestHandler):
def do_GET(self):
cookies = SimpleCookie(self.headers.get('Cookie'))
# then use somewhat like a dict, e.g:
username = cookies['username'].value
回答OP的问题: 问题是你在错误的地方寻找饼干。 使用以下行,如果计算机的操作系统环境变量名为
HTTP\u COOKIE
,请检入该变量:
if 'HTTP_COOKIE' in os.environ:
cookie_string = os.environ.get('HTTP_COOKIE')
但没有理由认为运行python服务器会创建操作系统范围的环境变量
相反,您必须查看从中派生的BaseHTTPRequestHandler
。
访问Cookie的正确方法如下:
cookie_string = s.headers.get('Cookie')
它将解析客户端发送的头并为您提供相应的cookie字符串 我找到了解决办法。我用s.cookieHeader=s.headers.get('Cookie')替换了#reading下的所有内容