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)

两种方案对比

特性FaradayHTTParty
代理配置proxy: { uri:, user:, password: }http_proxy(host, port, user, pass)
HTTPSssl: { verify: false }verify: false
HTTPS Tunnel请求头添加(HTTP only)请求头添加(HTTP only)
中间件✅ 灵活中间件链❌ 无中间件
适用场景复杂 HTTP 管线快速 API 调用

需要企业代理方案?

我们可根据目标站点、并发规模与稳定性目标提供定制方案。