使用不同的IP每隔15秒打开一个站点

时间:2013-01-09 21:58:41

标签: python python-2.7

抱歉,如果我的英语不好。 我想编写一个可以每15秒打开一次网站的程序。但是用不同的IP来做。这意味着获取IP列表,每15秒打开一个网站。你是怎么做到的?我应该使用什么模块?谢谢你

1 个答案:

答案 0 :(得分:2)

如果您正在询问如何确保每15秒启动一次连接,即使每个连接可能需要几秒钟(甚至可能超过15秒),这也很容易。由于你每15秒只进行一次连接,所以没有理由不为每个连接生成一个线程。

所以:

def connectToSiteFunction(ip):
    # your code to bind ip (if it's a source) or connect to it (if it's a dst) 
    # and do your thing here

def connectAndWait():
    for ip in ips:
        t = threading.Thread(target=connectToSiteFunction, args=(ip,))
        yield t
        t.start()
        os.sleep(15)

threads = [t for t in connectAndWait()]
for t in threads:
    t.join()

如果您正在谈论目标IP,并且您想知道如何为每个请求使用不同的...那么,您通常只需修改URL。像这样:

def connectToSiteFunction(ip):
    url = 'http://{}/path/to/page.html'.format(ip)
    # now open url as normal

如果你问如何将源地址绑定到你选择的URL下载库,你必须告诉我们哪个库,但是:库中是否有一个参数,或者它有一个方法你可以指定一个socket工厂,或者这是不可能的(除非你想用你自己的工厂monkeypatch socket.socket)。如果它允许您指定socket工厂,那么执行此操作的方法是:

def make_socket_factory(srcip):
    def socket_factory():
        s = socket.socket()
        s.bind((srcip, 0))
        return s
    return socket_factory

然后只需将make_socket_factory(srcip)作为工厂传递。

如果您想知道如何首先下载网址...有很多方法可以做到这一点,从stdlib urllib2requestspycurl到{ {1}},在SO(以及其他地方)已经有很多答案可以比较和对比它们。