我有一种情况,我需要从重定向响应(例如登录页面)中提取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/