HTTParty 代理认证:主机、端口、用户名和密码
把 HTTP 代理主机、数字端口和可选的代理凭据直接传给 HTTParty 请求,同时让 API 令牌保留在它自己的请求头里。
HTTParty 把正向代理解析为请求选项。让服务 URL 保持为第一个参数:
response = HTTParty.get(
'https://api.example/items',
http_proxyaddr: 'proxy.example',
http_proxyport: 8080,
http_proxyuser: ENV.fetch('PROXY_USER'),
http_proxypass: ENV.fetch('PROXY_PASSWORD'),
headers: { 'Authorization' => "Bearer #{ENV.fetch('API_TOKEN')}" },
open_timeout: 5,
read_timeout: 15
)
puts response.code
代理主机和端口指向中间人,代理用户名和密码在那里认证。Authorization 请求头属于 API,其账号可以完全不同。
如果代理不需要认证,就省略 http_proxyuser 和 http_proxypass。在允许的公共线路上发起公共 API 请求时,从HTTP 代理列表里取一个 HTTP 地址,且请求和类的默认值里都不要保留代理凭据。host 字段是作为代理地址传给 Net::HTTP 的;主机名要和端口分开给,而不是目标 URL 或 PAC URL。
包含 HTTParty 的包装类也可以改用它的 http_proxy 类方法设置默认值。对提供这些选项的那次调用来说,请求选项会覆盖这些默认值。
这里说的是 HTTParty 的默认连接适配器。自定义 connection_adapter 负责解释自己的选项,所以当某个有效设置看起来被忽略时,要去检查那个适配器。HTTP 状态要和解析后的 API 数据分开读;JSON 解析成功并不是认证结果。