对不起,如果我的英语不好。我想编写一个可以每 15 秒打开一次站点的程序。但是用不同的IP来做。这意味着获取一个 IP 列表,每 15 秒打开一个网站。你是怎么做到的?我应该使用什么模块?谢谢
问问题
1820 次
1 回答
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,并且想知道如何为每个请求使用不同的 IP……那么,您通常只需修改 URL。像这样的东西:
def connectToSiteFunction(ip):
url = 'http://{}/path/to/page.html'.format(ip)
# now open url as normal
如果您询问如何将源地址与您选择的 URL 下载库绑定,您必须告诉我们哪个库,但是:该库将有一个参数,或者它可以让您指定一个socket
工厂,否则将是不可能的(除非你想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)
然后作为工厂传入。
如果您首先想知道如何下载 URL……有很多方法可以做到这一点,从 stdliburllib2
到requests
和pycurl
to twisted
,并且已经有很多关于 SO(和其他地方)比较和对比它们的答案。
于 2013-01-09T22:34:16.500 回答