Rhowch gynnig ar ymgeiswyr dirprwy gyda chliantiaid Ruby Net::HTTP ar wahân
Crëwch un enghraifft Net::HTTP ar gyfer pob ymgeisydd dirprwy a stopiwch yn ôl yr ymateb y mae eich gweithrediad ei wirioneddol angen.
Mae rhestr o ddirprwyon ond yn ddefnyddiol pan fydd pob ymgais yn creu cleient wedi'i ffurfweddu ar gyfer y pen hwnnw. Ar gyfer GET trwy ddirprwyon HTTP heb awdurdodi, gellir defnyddio Net::HTTP fel hyn:
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
endMae'r pedwerydd dadl yn dewis porth y dirprwy; mae uri.host ac uri.port yn dal i nodi'r cyrchfan. Llenwch y ddau gofnod enghreifftiol o'r rhestr dirprwyon HTTP wrth wirio URL cyhoeddus a ganiateir trwy bennau HTTP heb awdurdodi. Mae request_uri yn cadw ei lwybr a'i ymholiad. Mae'r enghraifft yn trin methiannau cysylltu a darllen arferol ac yn cofnodi statws HTTP pan ddaw un.
Yma mae unrhyw ymateb 2xx yn diweddu'r chwiliad. Os yw eich gweithrediad yn disgwyl canlyniad arall, diffiniwch y maen prawf hwnnw'n eglur. Nid yw ailgyfeiriad yn profi'n awtomatig bod y dudalen a ddymunir wedi'i chael.
Cadwch ailadrodd awtomatig yn briodol i'r dull. Gall POST sy'n dod i ben ar ôl anfon ei gorff fod eisoes wedi newid y cymhwysiad pell; gallai ceisio eto trwy ddirprwy arall ailadrodd yr effaith honno. Nid yw'r enghraifft GET yn addo ailchwarae diogel o drafodion mympwyol.