Փորձեք վստահված սերվերի թեկնածուներին 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 օրինակը չի խոստանում կամայական գործարքների անվտանգ կրկնարկում։