1

我有一个案例,我需要从重定向响应(例如登录页面)中提取 cookie。

我已经阅读了文档,甚至是源代码,但仍然找不到这样做的方法。

默认情况下,AsyncHTTPClient将遵循重定向并返回重定向的响应,其中不包含Set-Cookie因此无用的。如果给定 option follow_redirects=False,它会抛出一个HTTPError只是因为响应代码不是 200。我也尝试了阻塞HTTPClient类,它是一样的。

那么,这样做的正确方法是什么?我认为当用户成功登录时,服务器将标头与标Set-Cookie头一起发送是一种常见的方式。Location

它可以被认为是一个错误吗?或者,设计缺陷?

4

1 回答 1

2

您可以从 HTTPError.response 属性中提取 HTTPResponse 对象,包括其标头:

http://tornado.readthedocs.org/en/latest/httpclient.html#tornado.httpclient.HTTPError

下面的代码演示了这一点:

from tornado.ioloop import IOLoop
from tornado import gen
from tornado.httpclient import AsyncHTTPClient, HTTPError

client = AsyncHTTPClient()


@gen.coroutine
def fetch():
    try:
        yield client.fetch('http://tornadoweb.org', follow_redirects=False)
    except HTTPError as e:
        print 'response:'
        print e.response
        print
        print 'headers:'
        print e.response.headers


IOLoop.current().run_sync(fetch)
于 2015-02-05T04:21:41.350 回答