Ruby Tunnel Proxy: Faraday and HTTParty
Ruby Faraday and HTTParty integrating 16Yun Crawler Proxy.
16Yun Engineering TeamApr 29, 20261 min read
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 调用 |
Need an enterprise proxy plan?
We can tailor architecture to your target domains, concurrency, and reliability goals.