Ruby Faraday Proxy Integration
Faraday is a flexible HTTP client library for Ruby with a middleware architecture. It supports proxy configuration through connection options, and its middleware stack makes it easy to add retry logic and logging around proxied requests.
Basic Proxy Setup
conn = Faraday.new( url: 'https://httpbin.org', proxy: 'http://YOUR_USERNAME:YOUR_PASSWORD@gate.hexproxies.com:8080', request: { timeout: 30, open_timeout: 10 } ) do |f| f.response :logger f.adapter Faraday.default_adapter end
response = conn.get('/ip') puts "Status: #{response.status}" puts "Body: #{response.body}" ```
Sticky Sessions
session_user = "YOUR_USERNAME-session-ruby001"
conn = Faraday.new(
url: 'https://example.com',
proxy: "http://#{session_user}:YOUR_PASSWORD@gate.hexproxies.com:8080"# Both requests exit from the same IP login_resp = conn.post('/login', { user: 'me', pass: 'secret' }.to_json) dashboard_resp = conn.get('/dashboard') ```
Retry Middleware
conn = Faraday.new( url: 'https://httpbin.org', proxy: 'http://YOUR_USERNAME:YOUR_PASSWORD@gate.hexproxies.com:8080' ) do |f| f.request :retry, { max: 3, interval: 1, interval_randomness: 0.5, backoff_factor: 2, retry_statuses: [429, 503], exceptions: [Faraday::ConnectionFailed, Faraday::TimeoutError] } f.adapter Faraday.default_adapter end ```
Concurrent Requests with Threads
urls = %w[
https://httpbin.org/ip
https://httpbin.org/headers
https://httpbin.org/getthreads = urls.map do |url| Thread.new do resp = conn.get(URI.parse(url).path) puts "#{url}: #{resp.status}" end end
threads.each(&:join) ```
Custom Middleware for Proxy Logging
class ProxyLogger < Faraday::Middleware
def call(env)
start = Time.now
response = @app.call(env)
elapsed = ((Time.now - start) * 1000).round(2)
puts "[Proxy] #{env.url} -> #{response.status} (#{elapsed}ms)"
response
endconn = Faraday.new(proxy: 'http://YOUR_USERNAME:YOUR_PASSWORD@gate.hexproxies.com:8080') do |f| f.use ProxyLogger f.request :retry, max: 3, retry_statuses: [429, 503] f.adapter Faraday.default_adapter end ```
Environment-Based Configuration
proxy_url = ENV.fetch('HEX_PROXY_URL')
conn = Faraday.new(url: 'https://example.com', proxy: proxy_url)Faraday makes it easy to swap backends -- the same proxy configuration works with Net::HTTP, Typhoeus, or Patron adapters.