使用tornado.httpclient.AsyncHTTPClient重定向响应的访问头?

时间:2015-02-05 03:35:07

标签: python cookies tornado asynchttpclient

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

我已阅读过该文档,甚至是源代码,但仍无法找到实现此目的的方法。

默认情况下,AsyncHTTPClient将遵循重定向并返回重定向的响应,该响应不包含Set-Cookie因此无用。如果给出选项follow_redirects=False,则只会因为响应代码不是200而抛出HTTPError。我也尝试了阻止HTTPClient类,它是一样的。< / p>

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

是否可以将其视为错误?或者,设计缺陷?

1 个答案:

答案 0 :(得分: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)