Ruby は接続されるまでプロキシを機械化して再試行します
概要
私がやりたいのはこれです
ip|port を含むプロキシ リストがあります
現在、Mechanize はこれらのプロキシを使用しており、設定しました
open_timeout = 20
read_timeout = 20
私がやりたいのは再試行ですが、「proxies = @proxies.order(“RANDOM()”).first」であっても同じプロキシで再試行されます。新しいプロキシはロードされませんが、代わりにロードされます。キャッシュからロードする
これが私が使用する私のコードです:
begin
proxies = @proxies.order("RANDOM()").first
proxy_ip = proxies.ip
proxy_port = proxies.port
puts proxy_ip
puts proxy_port
agent = Mechanize.new
agent.open_timeout = 20
agent.read_timeout = 20
agent.set_proxy(proxy_ip, proxy_port)
page = agent.get("http://whatismyip.org/"
rescue
puts "oh shit, error"
retry
end
doc = page.parser
ip_ad = doc.css('span').text
puts ip_ad
ここで私の質問は、キャッシュからプロキシを使用するのではなく、新しいプロキシをロードするにはどうすればよいですか?
解決策
Googleからここに来た人のために、これが私がそれを解決した方法です
offset = rand(Proxy.count)
proxies = @proxies.offset(offset).first
私はオフセットを使用していますが、それは魅力的に機能します、そしてこれは
始める ページ = ミニオン.submit(フォーム,ボタン)
rescue Mechanize::ResponseCodeError => e
offset = rand(Proxy.count)
proxies = @proxies.offset(offset).first
proxy_ip = proxies.ip
proxy_port = proxies.port
puts proxy_ip
puts proxy_port
minion.open_timeout = 3.0
minion.read_timeout = 3.0
minion.cookie_jar.clear!
minion.max_history = 0
#minion.set_proxy(proxy_ip, proxy_port)
sleep 5.0
if page.parser.xpath('//h2[contains(@class,"name")]').text == "Ingen träff"
puts "ingen träff"
else
puts "retrying"
retry
end
end
みんな楽しんでください