当 Ruby 类 include 了 HTTParty,就把代理放在这个类上,并通过它发送请求:

class Reports
  include HTTParty
  http_proxy 'proxy.example', 8080
end

response = Reports.get('https://reports.example/monthly')

示例假设 HTTParty 已加载。proxy 方法接收主机名和整数端口,还可以传用户名和密码参数。对于没有代理账号的、被允许的 public-API 测试,可以从 HTTP 代理列表里选一个 HTTP 候选,用它提供主机和端口。目标 URL 仍留在 get 上。

在 Reports 的实例方法里,如果意图是调用那个已配置的类方法,就要用 self.class.get(...)。改成调用顶层的 HTTParty 模块,可能会绕过你刚配置好默认值的包装层。

当多个 API 包装层共用一个应用时,这个区别同样重要。给每个包装层各自应有的代理策略,而不是为了修一个类去全局改动 HTTParty::Basement。

HTTParty 还暴露 按请求设置的代理选项,例如 http_proxyaddr 和 http_proxyport。当这条路由确实只属于某一次请求时,就用它们。如果每个 Reports 操作都该走同一条路,类级别的默认值更好读。

相关文章