Techioz Blog

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

みんな楽しんでください