Ruby Tunnel Proxy: Faraday and HTTParty
Ruby Faraday and HTTParty integrating 16Yun Crawler Proxy.
16Yun Engineering TeamApr 29, 20261 min read
Faraday
Faraday configures via the proxy parameter, supporting chained middleware:
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 adds via request headers:
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 configures via the http_proxy class method:
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)Comparison of Two Approaches
| Feature | Faraday | HTTParty |
|---|---|---|
| Proxy Config | proxy: { uri:, user:, password: } | http_proxy(host, port, user, pass) |
| HTTPS | Yes ssl: { verify: false } | Yes verify: false |
| HTTPS Tunnel | Request header addition (HTTP only) | Request header addition (HTTP only) |
| Middleware | Yes (flexible middleware chain) | No (no middleware) |
| Use Case | Complex HTTP pipeline | Quick API calls |
Need an enterprise proxy plan?
We can tailor architecture to your target domains, concurrency, and reliability goals.