Перейти до вмісту
Guides 3 хв читання 793 переглядів

Використання проксі в Ruby

Цей посібник досліджує інтеграцію проксі в Ruby-додатках за допомогою Net::HTTP та Mechanize. Дізнайтеся, як налаштовувати та використовувати проксі для безпечних та анонімних веб-операцій.

Використання проксі в Ruby

У Ruby, Net::HTTP та Mechanize спрощують використання проксі, дозволяючи пряме налаштування хоста, порту та облікових даних для автентифікації проксі під час ініціалізації об'єкта або встановлення з'єднання. Ці бібліотеки дозволяють Ruby-додаткам маршрутизувати мережеві запити через проміжні проксі-сервери, підтримуючи такі сценарії використання, як ротація IP-адрес, геотаргетинг та обхід обмежень швидкості запитів.

Налаштування проксі для Net::HTTP

Net::HTTP — це стандартна бібліотека Ruby для виконання HTTP-запитів. Вона надає прямий контроль над параметрами з'єднання, включаючи налаштування проксі.

Прямі параметри проксі

Щоб налаштувати проксі для запиту Net::HTTP, вкажіть хост, порт, ім'я користувача та пароль проксі під час створення об'єкта Net::HTTP або під час запуску з'єднання.

require 'net/http'
require 'uri'

# Proxy details
proxy_host = 'your_proxy_host.com'
proxy_port = 8080
proxy_user = 'proxy_username'
proxy_pass = 'proxy_password'

# Target URL
uri = URI('http://example.com/data')

# Method 1: Specify proxy parameters in Net::HTTP.new
http = Net::HTTP.new(uri.host, uri.port, proxy_host, proxy_port, proxy_user, proxy_pass)
http.use_ssl = (uri.scheme == 'https') # Required for HTTPS

request = Net::HTTP::Get.new(uri.request_uri)

begin
  response = http.request(request)
  puts "Method 1 Response Status: #{response.code}"
  # puts response.body
rescue Net::HTTPClientException => e
  puts "HTTP Error: #{e.message}"
rescue Net::ReadTimeout, Net::OpenTimeout => e
  puts "Timeout Error: #{e.message}"
rescue StandardError => e
  puts "An error occurred: #{e.message}"
ensure
  http.finish if http.started? # Ensure connection is closed
end

# Method 2: Specify proxy parameters in Net::HTTP.start block
uri_https = URI('https://httpbin.org/ip') # A simple endpoint to check IP

Net::HTTP.start(uri_https.host, uri_https.port,
                proxy_host, proxy_port, proxy_user, proxy_pass,
                use_ssl: uri_https.scheme == 'https') do |http_with_proxy|

  request_https = Net::HTTP::Get.new(uri_https.request_uri)
  response_https = http_with_proxy.request(request_https)
  puts "Method 2 Response Status: #{response_https.code}"
  puts "External IP via proxy: #{response_https.body}" # Should show proxy's IP
rescue Net::HTTPClientException => e
  puts "HTTP Error: #{e.message}"
rescue Net::ReadTimeout, Net::OpenTimeout => e
  puts "Timeout Error: #{e.message}"
rescue StandardError => e
  puts "An error occurred: #{e.message}"
end

Змінні середовища

Net::HTTP може автоматично визначати налаштування проксі зі змінних середовища. Цей підхід підходить для системного або загальноприкладного налаштування проксі без зміни коду.

  • http_proxy: Для HTTP-запитів (наприклад, http://user:[email protected]:8080)
  • https_proxy: Для HTTPS-запитів (наприклад, https://user:[email protected]:8080)
  • no_proxy: Список імен хостів, розділених комами, які повинні обходити проксі.
require 'net/http'
require 'uri'

# Set environment variables (example, typically done outside the script)
# ENV['http_proxy'] = 'http://proxy_username:proxy_password@your_proxy_host.com:8080'
# ENV['https_proxy'] = 'http://proxy_username:proxy_password@your_proxy_host.com:8080' # Note: https_proxy can also be an http proxy
# ENV['no_proxy'] = 'localhost,127.0.0.1'

uri = URI('http://example.com/data')
http = Net::HTTP.new(uri.host, uri.port) # No explicit proxy parameters
request = Net::HTTP::Get.new(uri.request_uri)

# If http_proxy/https_proxy are set, Net::HTTP will use them.
begin
  response = http.request(request)
  puts "Env Var Response Status: #{response.code}"
rescue StandardError => e
  puts "An error occurred: #{e.message}"
end

# Clear environment variables after use if set programmatically
# ENV.delete('http_proxy')
# ENV.delete('https_proxy')

Налаштування проксі для Mechanize

Mechanize — це Ruby-гем, який спрощує веб-скрейпінг, емулюючи веб-браузер. Він побудований на базі Net::HTTP і пропонує API вищого рівня для роботи з проксі.

Прямі параметри проксі

Mechanize дозволяє встановлювати деталі проксі під час ініціалізації агента або шляхом виклику методу set_proxy.

require 'mechanize'

# Proxy details
proxy_host = 'your_proxy_host.com'
proxy_port = 8080
proxy_user = 'proxy_username'
proxy_pass = 'proxy_password'

# Method 1: Initialize Mechanize with proxy parameters
agent = Mechanize.new do |a|
  a.set_proxy(proxy_host, proxy_port, proxy_user, proxy_pass)
  a.user_agent_alias = 'Mac Safari' # Recommended for web scraping
end

begin
  page = agent.get('http://example.com/')
  puts "Method 1 Mechanize Page Title: #{page.title}"
rescue Mechanize::ResponseCodeError => e
  puts "Mechanize HTTP Error: #{e.response_code} - #{e.page.uri}"
rescue Mechanize::Error => e
  puts "Mechanize Error: #{e.message}"
rescue StandardError => e
  puts "An error occurred: #{e.message}"
end

# Method 2: Pass proxy parameters directly to Mechanize.new (simpler for one-off)
agent_direct = Mechanize.new(proxy_addr: proxy_host,
                             proxy_port: proxy_port,
                             proxy_user: proxy_user,
                             proxy_pass: proxy_pass)
agent_direct.user_agent_alias = 'Linux Firefox'

begin
  page_direct = agent_direct.get('https://httpbin.org/ip')
  puts "Method 2 Mechanize External IP via proxy: #{page_direct.body}"
rescue Mechanize::ResponseCodeError => e
  puts "Mechanize HTTP Error: #{e.response_code} - #{e.page.uri}"
rescue Mechanize::Error => e
  puts "Mechanize Error: #{e.message}"
rescue StandardError => e
  puts "An error occurred: #{e.message}"
end

Ротація проксі за допомогою Mechanize

Для сценаріїв, що вимагають частих змін IP-адрес, таких як великомасштабний збір даних, ротація проксі є важливою. Метод set_proxy Mechanize можна викликати кілька разів, щоб змінити проксі протягом життєвого циклу агента.

```ruby
require 'mechanize'

proxies = [
{ host: 'proxy1.example.com', port: 80

Оновлено: 03.03.2026
Назад до категорії

Читайте також

Guides 2 хв

Проксі для Nike SNKRS: купуйте лімітовані релізи та створюйте безліч акаунтів

Використовуйте residential або mobile проксі для Nike SNKRS, щоб брати участь у розіграшах з кількох акаунтів, обходити IP-ліміти та купувати лімітовані дропи без банів. Який тип обрати та як налаштувати GProxy.

Guides 2 хв

Як налаштувати проксі на iPhone (Wi-Fi та SOCKS5)

Налаштуйте проксі на iPhone через стандартні параметри Wi-Fi (HTTP/HTTPS) або додаток для проксі, як-от Shadowrocket, для SOCKS5 та стільникового зв'язку. Покрокове налаштування iOS та обмеження, про які варто знати.

Guides 3 хв

Проксі для Tinder: мультиакаунтинг та уникнення банів

Використовуйте мобільні або резидентські проксі для Tinder, щоб керувати кількома профілями та уникати IP shadowbans. Чому мобільні виграють, як усе налаштувати та чому сам по собі проксі не змінить ваше місто.

Guides 2 хв

Проксі для StockX: моніторинг цін та керування акаунтами

Використовуйте residential, ISP або mobile проксі для StockX, щоб моніторити ціни, керувати кількома акаунтами та купувати дропи без банів. Ось який тип обрати та як налаштувати GProxy.

Guides 3 хв

Проксі для OpenAI API: доступ, ліміти (Rate Limits) та налаштування

Маршрутизуйте OpenAI API через residential або ISP проксі, щоб отримати доступ до підтримуваних регіонів, уникнути 429 rate limits та ізолювати акаунти. Який проксі використовувати плюс приклади налаштування Python.

Guides 1 хв

Налаштування проксі в Cypress для E2E тестування

Налаштування проксі в Cypress: змінні HTTP_PROXY, cy-proxy-middleware та тестування геозалежного контенту.

Спробуйте наші проксі

20,000+ проксі в 100+ країнах світу

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.