我有一个案例需要从重定向响应中提取cookie(例如,登录页面)。
我已阅读过该文档,甚至是源代码,但仍无法找到实现此目的的方法。
默认情况下,AsyncHTTPClient
将遵循重定向并返回重定向的响应,该响应不包含Set-Cookie
因此无用。如果给出选项follow_redirects=False
,则只会因为响应代码不是200而抛出HTTPError
。我也尝试了阻止HTTPClient
类,它是一样的。< / p>
那么,正确的方法是什么?我认为,当用户成功登录时,服务器将Set-Cookie
标头与Location
标头一起发送的常用方式。
是否可以将其视为错误?或者,设计缺陷?
答案 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)