Tornado 的代理选项需要正确的 HTTP 后端
在配置代理请求选项之前,请确认 Tornado 当前启用的 HTTP 客户端实现。
Tornado 只暴露一个异步 HTTP 客户端接口,其底层有多种实现。因此,即使代理端点正确,代理选项也可能因所选实现而失败。
HTTP 客户端文档将 SimpleAsyncHTTPClient 标为默认实现,并记录了基于 curl 的替代实现。像 proxy_host 这样的请求选项带有与具体实现相关的支持说明。在向 fetch 调用添加选项前,请先读这些说明。
在创建客户端之前完成配置
如果环境已经具备 curl 后端,应用可以在创建共享客户端之前选择它:
from tornado.httpclient import AsyncHTTPClient
AsyncHTTPClient.configure('tornado.curl_httpclient.CurlAsyncHTTPClient')
client = AsyncHTTPClient()
然后为预期的调用使用文档中给出的代理主机、端口、认证和超时请求选项。主机名要与数字端口分开。选择后端本身并不会选择代理端点。对于允许的公共 HTTP 路由,HTTP 代理列表为这些请求选项提供主机和端口候选。
客户端的创建方式很重要,因为应用或框架可能在这段代码运行之前就创建并保留了一个 HTTP 客户端。应当检查失败请求实际使用的实例,而不是事后另建一个客户端并假定它能解释第一个。
诊断时,请把当前生效的后端及其底层库版本与失败阶段一起记录。要区分不支持的请求选项、网络超时以及代理返回的 HTTP 响应,这些观察会指向不同的修复方式。