为python客户端连接设置安全cookie

时间:2018-05-16 19:57:41

标签: authentication webserver tornado

我目前正在尝试为使用Tornado的Python客户端传入的连接设置安全cookie,但是,虽然设置cookie 可以正常连接来自浏览器,但set_secure_cookie调用确实似乎不适用于Python客户端。

以下是我的Tornado服务器代码的摘录,该代码同时提供WebSocket和HTTP请求:

class BaseHandler(tornado.web.RequestHandler):

    def get_current_user(self):
        return self.get_secure_cookie("user")


class LoginHandler(BaseHandler):
    def get(self):
        self.write('<html><body><form action="/login" method="post">'
                   'Name: <input type="text" name="name">'
                   '<input type="submit" value="Sign in">'
                   '</form></body></html>')

    def post(self):
        print("post received: ", self.get_argument("name"))
        try:
            print('trying to set cookie')
            self.set_secure_cookie("user", self.get_argument("name"))
        except Exception as e:
            print(e)
        print("cookie: ", self.get_current_user())
        self.redirect("http://192.168.6.21/")

def main():
    application = tornado.web.Application([
    (r'/ws', EchoWebSocket),
    (r'/login', LoginHandler)
     ], cookie_secret="nescafeh")
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(9000)
    tornado.ioloop.IOLoop.instance().start()

尝试发送POST请求以在单独的客户端上设置cookie:

s=requests.Session()

r = s.post("http://127.0.0.1:9000/login", data={'name': 'hello'})
sleep(2)
print(r.text)

尝试设置Cookie时,不会返回任何错误,删除了“self.redirect”#39;从POST请求看到响应的行没有帮助(没有打印文本)。

非常感谢!

1 个答案:

答案 0 :(得分:0)

r.text为空,因为您没有在处理程序中向响应正文写入任何内容。

在处理程序的self.write("something")方法中尝试postr.text应打印出响应。

您还可以查看r.cookies以查看您的Cookie是否已设置。