Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python http服务器-can';我不读饼干_Python_Http_Cookies_Server - Fatal编程技术网

Python http服务器-can';我不读饼干

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

我制作了python服务器,我想创建、发送和接收cookie。我在接收它们时遇到了问题,当我在Chrome上访问它时,我可以看到cookie被创建了。我读到它应该出现在os.environ中,但它从来没有出现过。这是我的密码:

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下的所有内容