集成

将Shifter与以下工具配合使用 Ruby

在几分钟内将 Shifter 的住宅代理和 ISP 代理接入 Ruby。兼容 Net::HTTP、HTTParty、Faraday、Mechanize 和 Watir——适用于普通脚本、Sinatra 和 Rails。

快速入门

安装

gem install httparty

基本用法

require 'httparty'

response = HTTParty.get(
  'https://ipinfo.io/json',
  http_proxyaddr: 'p.shifter.io',
  http_proxyport: 443,
  http_proxyuser: 'customer-USERNAME-country-us-sid-123ABC',
  http_proxypass: 'PASSWORD',
  timeout: 30
)

puts response.parsed_response
# {"ip" => "154.16.xxx.xxx", "city" => "New York", "country" => "US", ...}

功能特性

即插即用,支持 Net::HTTP、HTTParty、Faraday、Mechanize、RestClient 以及任何接受代理 URL 的 HTTP 客户端
默认按请求轮换,使用`sid`实现粘性会话,使用`ttl-N`实现N秒定时固定
兼容 Ruby 2.7 及所有 Ruby 3.x 版本,包括 3.3
同一网关端点支持 HTTP、HTTPS 和 SOCKS5 协议
通过用户名参数在 195+ 个国家/地区进行地理定位,无需额外的 gem
可直接用于 Sinatra、Rails、Hanami 及任何自定义 Ruby 框架——无 SDK 锁定

示例

Net::HTTP(零依赖)

Ruby 标准库即可满足需求。Net::HTTP.start 接受代理主机、端口、用户名和密码,无需任何 gem。最适合小型脚本和 Lambda 风格的函数。

require 'net/http'
require 'uri'
require 'json'

PROXY_HOST = 'p.shifter.io'
PROXY_PORT = 443
PROXY_USER = 'customer-USERNAME-country-uk-sid-456DEF'
PROXY_PASS = 'PASSWORD'

uri = URI('https://example.co.uk/products')

http = Net::HTTP.new(
  uri.host,
  uri.port,
  PROXY_HOST,
  PROXY_PORT,
  PROXY_USER,
  PROXY_PASS
)
http.use_ssl = true
http.read_timeout = 30

req = Net::HTTP::Get.new(uri.request_uri)
req['User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36'

response = http.request(req)
puts "Status: #{response.code}, length: #{response.body.length}"

Faraday 与粘性会话

Faraday 是 Ruby 最灵活的 HTTP 客户端——基于中间件,可随意切换适配器。在代理用户名中添加 `sid`,可在整个会话期间固定同一个住宅 IP。

require 'faraday'
require 'securerandom'

sid = SecureRandom.hex(4)

conn = Faraday.new(
  url: 'https://example.de',
  proxy: "customer-USERNAME-country-de-city-berlin-sid-#{sid}-ttl-300:PASSWORD@p.shifter.io:443",
  request: { timeout: 30 },
  headers: { 'User-Agent' => 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36' }
)

login     = conn.post('/login', { email: 'user@example.com', password: 'secret' }.to_json,
                      'Content-Type' => 'application/json')
dashboard = conn.get('/dashboard')
orders    = conn.get('/orders')

puts [login.status, dashboard.status, orders.status].inspect

Mechanize(表单感知爬取)

Mechanize 可自动化表单提交和链接跟踪。在 agent 上配置代理后,其访问的每个页面都将通过 Shifter 路由。

require 'mechanize'

agent = Mechanize.new
agent.set_proxy('p.shifter.io', 443,
                'customer-USERNAME-country-us-city-newyork-sid-789GHI',
                'PASSWORD')
agent.user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
agent.read_timeout = 30

page = agent.get('https://example.com/login')

form = page.form('login')
form.email = 'user@example.com'
form.password = 'secret'
dashboard = form.submit

dashboard.links_with(href: %r{/orders/\d+}).each do |link|
  order = link.click
  puts order.search('h1').text.strip
end

Rails(生产 HTTP 服务)

将 Shifter 封装在一个轻量级 Rails 服务后面,使每个控制器/任务使用相同的代理配置。支持按请求轮换或按用户固定。

# app/services/shifter_client.rb
require 'faraday'
require 'faraday/retry'

class ShifterClient
  PROXY_HOST = 'p.shifter.io:443'

  def initialize(country: 'us', sid: nil)
    sid_part  = sid ? "-sid-#{sid}" : ''
    proxy_url = "customer-USERNAME-country-#{country}#{sid_part}:PASSWORD@#{PROXY_HOST}"

    @conn = Faraday.new(proxy: proxy_url, request: { timeout: 30 }) do |f|
      f.request :retry, max: 3, interval: 1.0, backoff_factor: 2
      f.response :json
      f.adapter Faraday.default_adapter
    end
  end

  def get(url)
    @conn.get(url)
  end
end

# In a controller or job:
class ProductsController < ApplicationController
  def index
    client = ShifterClient.new(country: 'uk', sid: current_user.id)
    @products = client.get('https://example.co.uk/products.json').body
  end
end
常见问题

常见问题

关于将 Shifter 与 Ruby 搭配使用的常见问题。

将代理主机、端口、用户名和密码作为第 3 至第 6 个参数传递给 Net::HTTP.new。对于 HTTPS 目标,请设置 use_ssl = true。Ruby 标准库即可满足需求,无需额外的 gem。

立即开始

开始将Shifter与以下工具配合使用 Ruby

在 5 分钟内将 Shifter 的 205M+ 住宅代理和 ISP 代理添加到您的 Ruby 和 Rails 技术栈中。兼容 Net::HTTP、HTTParty、Faraday 和 Mechanize。

免费试用 Shifter几分钟内完成设置,随时可取消。