-2

私の英語が上手くなければごめんなさい。15秒ごとにサイトを開くことができるプログラムを書きたいです。ただし、別のIPで実行してください。つまり、IPのリストを取得し、15秒ごとにWebサイトを開きます。どうやってやったの?どのモジュールを使用する必要がありますか?ありがとうございます

4

1 に答える 1

2

15秒ごとに1つの接続を確実に切断する方法を尋ねている場合、各接続に数秒(場合によっては15秒以上)かかる場合でも、それは簡単です。15秒ごとに1つの接続しかないため、それぞれにスレッドを生成しない理由は実際にはありません。

それで:

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からtoまでrequests、さまざまな方法があります。SO (および他の場所)では、それらを比較対照するための回答がすでにたくさんあります。pycurltwisted

于 2013-01-09T22:34:16.500 に答える