Proxy تىزىملىكى پەقەت ھەر بىر سىناق شۇ ئاخىرلاشقان نۇقتىغا ماسلاشتۇرۇلغان خېرىدار قۇرغاندىلا پايدىلىق بولىدۇ. ئىشەنچسىز HTTP proxy ئارقىلىق 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

تۆتىنچى ئارگۇمېنت proxy پورتىنى تاللايدۇ؛ uri.host ۋە uri.port يەنىلا مەنزىلنى كۆرسىتىدۇ. ئىشەنچسىز HTTP ئاخىرلاشقان نۇقتىلىرى ئارقىلىق رۇخسەت قىلىنغان ئاممىۋى URL نى تەكشۈرگەندە مىسالدىكى ئىككى خاتىرىنى HTTP proxy تىزىملىكىدىن تولدۇرۇڭ. request_uri ئۆز يولى ۋە سورىقىنى ساقلايدۇ. مىسال ئادەتتىكى ئۇلىنىش ۋە ئوقۇش مەغلۇبىيىتىنى بىر تەرەپ قىلىدۇ ۋە HTTP ھالىتى كەلگەندە خاتىرىلەيدۇ.

بۇ يەردە ھەرقانداق 2xx ئىنكاس ئىزدەشنى ئاخىرلاشتۇرىدۇ. ئەگەر مەشغۇلاتىڭىز باشقا نەتىجە كۈتسە، بۇ ئۆلچەمنى ئېنىق بەلگىلەڭ. قايتا يوللاش ئارزۇ قىلىنغان بەتنىڭ ئېلىنغانلىقىنى ئۆزلۈكىدىن ئىسپاتلىمايدۇ.

ئاپتوماتىك قايتىلاشنى مېتودقا ماس كەلتۈرۈڭ. بەدىنى ئەۋەتىلگەندىن كېيىن ۋاقتى ئۆتكەن POST يىراقتىكى پروگراممىنى ئاللىقاچان ئۆزگەرتكەن بولۇشى مۇمكىن؛ باشقا proxy ئارقىلىق قايتا سىناش بۇ تەسىرنى قايتىلايدۇ. GET مىسالى خالىغان سودىلارنىڭ بىخەتەر قايتا ئوينىلىشىغا ۋەدە بەرمەيدۇ.

مۇناسىۋەتلىك ماقالىلەر