Listi yfir proxy verður aðeins gagnlegur þegar hver tilraun býr til biðil sem er stilltur fyrir þann endapunkt. Fyrir GET í gegnum HTTP-proxy án auðkenningar er hægt að nota Net::HTTP svona:

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

Fjórða rökin velja proxygáttina; uri.host og uri.port tilgreina enn áfangastaðinn. Fylltu tvær dæmis færslurnar úr HTTP-proxylistanum þegar þú prófar leyfðan opinberan URL í gegnum HTTP-endapunkta án auðkenningar. request_uri varðveitir slóð sína og fyrirspurn. Dæmið meðhöndlar venjuleg tengingar- og lestrar mistök og skráir HTTP stöðu þegar hún berst.

Hér endar hvert 2xx svar leitina. Ef aðgerðin þín væntir annarrar niðurstöðu skaltu skilgreina það viðmið skýrt. Endurbeining sannar ekki sjálfkrafa að óskaðri síðu hafi verið náð.

Haltu sjálfvirkri endurtekningu í samræmi við aðferðina. POST sem rennur út eftir að líkami þess var sendur gæti þegar hafa breytt fjartölvunni; að prófa aftur í gegnum annað proxy getur endurtekið þau áhrif. GET-dæmið lofar ekki öruggri endurspilun af handahófi færslna.

Tengdir greinar