我目前正在尝试为使用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请求看到响应的行没有帮助(没有打印文本)。
非常感谢!
答案 0 :(得分:0)
r.text
为空,因为您没有在处理程序中向响应正文写入任何内容。
在处理程序的self.write("something")
方法中尝试post
,r.text
应打印出响应。
您还可以查看r.cookies
以查看您的Cookie是否已设置。