தனித்தனி Ruby Net::HTTP வாடிக்கையாளர்களுடன் ப்ராக்ஸி வேட்பாளர்களை முயற்சிக்கவும்
ஒவ்வொரு ப்ராக்ஸி வேட்பாளருக்கும் ஒரு Net::HTTP நிகழ்வை உருவாக்கி, உங்கள் செயலுக்கு உண்மையில் தேவையான பதிலின்படி நிறுத்துங்கள்.
ஒவ்வொரு முயற்சியும் அந்த முனைக்கு அமைக்கப்பட்ட வாடிக்கையாளரை உருவாக்கும்போது மட்டுமே ப்ராக்ஸி பட்டியல் பயனுள்ளதாகும். அங்கீகாரமற்ற HTTP ப்ராக்ஸிகள் வழியாக GET செய்ய Net::HTTP-ஐ இவ்வாறு பயன்படுத்தலாம்:
require 'net/http'
uri = URI('https://www.example.com/status')
proxies = ['http://proxy-a.example:8080',
'http://proxy-b.example:8080']
proxies.each do |value|
proxy = URI(value)
http = Net::HTTP.new(uri.host, uri.port, proxy.host, proxy.port)
http.use_ssl = uri.scheme == 'https'
http.open_timeout = 5
http.read_timeout = 10
begin
response = http.get(uri.request_uri)
puts "#{proxy.host}:#{proxy.port} #{response.code}"
break if response.is_a?(Net::HTTPSuccess)
rescue Net::OpenTimeout, Net::ReadTimeout, SocketError, SystemCallError, IOError => error
warn "#{proxy.host}:#{proxy.port} #{error.class}"
end
endநான்காவது உள்ளீடு ப்ராக்ஸி துறையைத் தேர்ந்தெடுக்கிறது; uri.host மற்றும் uri.port இன்னும் இலக்கைக் குறிக்கின்றன. அங்கீகாரமற்ற HTTP முனைகள் வழியாக அனுமதிக்கப்பட்ட பொது URL-ஐ சரிபார்க்கும்போது உதாரணத்தின் இரு உள்ளீடுகளையும் HTTP ப்ராக்ஸி பட்டியல்லிருந்து நிரப்புங்கள். request_uri அதன் பாதையையும் வினவலையும் தக்கவைக்கிறது. உதாரணம் வழக்கமான இணைப்பு மற்றும் படிப்பு தோல்விகளைக் கையாள்கிறது, HTTP நிலை வரும்போது பதிவு செய்கிறது.
இங்கே எந்த 2xx பதிலும் தேடலை முடிவுக்குக் கொண்டுவரும். உங்கள் செயல் வேறு முடிவை எதிர்பார்த்தால், அந்த அளவுகோலை வெளிப்படையாக வரையறுக்கவும். திசைதிருப்பல் விரும்பிய பக்கம் பெறப்பட்டதைத் தானாக நிரூபிக்காது.
தானியங்கி மறுமுயற்சியை முறைக்கு ஏற்றதாக வைத்திருங்கள். உடலை அனுப்பிய பின் நேரம் முடிந்த POST தொலை பயன்பாட்டை ஏற்கனவே மாற்றியிருக்கலாம்; வேறு ப்ராக்ஸி வழியாக மீண்டும் முயல்வது அந்த விளைவை மீண்டும் ஏற்படுத்தலாம். GET உதாரணம் தன்னிச்சையான பரிவர்த்தனைகளைப் பாதுகாப்பாக மீண்டும் இயக்குவதாக உறுதியளிக்கவில்லை.