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

FeatureFaradayHTTParty
Proxy Configproxy: { uri:, user:, password: }http_proxy(host, port, user, pass)
HTTPSYes ssl: { verify: false }Yes verify: false
HTTPS TunnelRequest header addition (HTTP only)Request header addition (HTTP only)
MiddlewareYes (flexible middleware chain)No (no middleware)
Use CaseComplex HTTP pipelineQuick API calls

Need an enterprise proxy plan?

We can tailor architecture to your target domains, concurrency, and reliability goals.