我有一种情况,我需要从重定向响应(例如登录页面)中提取Cookie。

我已经阅读了文档,甚至是源代码,但仍然找不到执行此操作的方法。

默认情况下,AsyncHTTPClient将遵循重定向并返回重定向的响应,该响应不包含Set-Cookie因此无用。如果给定选项follow_redirects=False,它将仅由于响应代码不是200而抛出HTTPError。我还尝试了阻塞HTTPClient类,它是相同的。

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

可以将其视为错误吗?还是设计不足?

最佳答案

您可以从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)

关于python - 使用Tornado.httpclient.AsyncHTTPClient访问重定向响应上的 header ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28335751/

10-14 20:05
查看更多