Ruby 隧道代理:Faraday 与 HTTParty 两种实现
Ruby Faraday 和 HTTParty HTTP 客户端对接亿牛云爬虫代理。
亿牛云技术团队2026年4月29日1 分钟阅读
Faraday
Faraday 通过 proxy 参数配置,支持链式中间件:
require 'faraday'
require 'json'
host = ENV.fetch('PROXY_HOST', 't.16yun.cn')
port = ENV.fetch('PROXY_PORT', '31111')
user = ENV.fetch('PROXY_USERNAME', 'user')
pass = ENV.fetch('PROXY_PASSWORD', 'password')
conn = Faraday.new(
url: 'https://httpbin.org',
proxy: { uri: "http://#{host}:#{port}", user: user, password: pass },
ssl: { verify: false }
)
response = conn.get('/ip')
puts JSON.parse(response.body)
Proxy-Tunnel 通过请求头添加:
tunnel = ENV.fetch('PROXY_TUNNEL', 'ruby-demo')
conn = Faraday.new(
url: 'http://httpbin.org',
proxy: { uri: "http://#{host}:#{port}", user: user, password: pass }
)
response = conn.get('/ip') { |req| req.headers['Proxy-Tunnel'] = tunnel }
puts JSON.parse(response.body)
HTTParty
HTTParty 通过 http_proxy 类方法配置:
require 'httparty'
require 'json'
host = ENV.fetch('PROXY_HOST', 't.16yun.cn')
port = ENV.fetch('PROXY_PORT', '31111')
user = ENV.fetch('PROXY_USERNAME', 'user')
pass = ENV.fetch('PROXY_PASSWORD', 'password')
HTTParty.http_proxy(host, port, user, pass)
response = HTTParty.get(
'https://httpbin.org/ip',
headers: { 'Proxy-Tunnel' => ENV.fetch('PROXY_TUNNEL', 'ruby-demo') },
verify: false
)
puts JSON.parse(response.body)
两种方案对比
| 特性 | Faraday | HTTParty |
|---|---|---|
| 代理配置 | proxy: { uri:, user:, password: } | http_proxy(host, port, user, pass) |
| HTTPS | ✅ ssl: { verify: false } | ✅ verify: false |
| HTTPS Tunnel | 请求头添加(HTTP only) | 请求头添加(HTTP only) |
| 中间件 | ✅ 灵活中间件链 | ❌ 无中间件 |
| 适用场景 | 复杂 HTTP 管线 | 快速 API 调用 |
需要企业代理方案?
我们可根据目标站点、并发规模与稳定性目标提供定制方案。