Многопоточные запросы Python через Tor - PullRequest
2 голосов
/ 27 апреля 2019

Следующий код - моя попытка сделать Python-запросы через tor, это прекрасно работает, однако я заинтересован в добавлении к этому многопоточности.

Поэтому я хотел бы одновременно выполнить около 10 различных запросов и обработать ихвыходы.Какой самый простой и эффективный способ сделать это?

def onionrequest(url, onionid):
    onionid = onionid
    session = requests.session()
    session.proxies = {}
    session.proxies['http'] = 'socks5h://localhost:9050'
    session.proxies['https'] = 'socks5h://localhost:9050'
    #r = session.get('http://google.com')


    onionurlforrequest = "http://" + url

    try:
        r = session.get(onionurlforrequest, timeout=15)
    except:
        return None
    if r.status_code = 200:
        listofallonions.append(url)

1 Ответ

0 голосов
/ 07 мая 2019

Мне сказали, что вы не должны многопоточными http-запросами, и что вы не должны использовать пакет requests с asyncio (который является асинхронным фреймворком для python), поэтому я бы порекомендовал использовать следующие пакеты для достиженияэто: asyncio, aiohttp, aiohttp_socks

пример кода:

import asyncio
import aiohttp
from aiohttp_socks import SocksConnector

async def fetch(session, url):
    async with session.get(url) as response:
        return await response.text()

async def main(urls):
    tasks = []
    connector = SocksConnector('socks5://localhost:9050')
    async with aiohttp.ClientSession(connector=connector, rdns=True) as session:
        for url in urls:
            tasks.append(fetch(session, url))
        htmls = await asyncio.gather(*tasks)
        for html in htmls:
            print(html)

if __name__ == '__main__':
    urls = [
            'http://python.org',
            'https://google.com',
            ...
        ]
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main(urls))

Использование asyncio поначалу может быть немного сложным, поэтому вам может потребоваться некоторое время попрактиковатьсяпрежде чем вы освоите его.

Если вы хотите более подробно объяснить разницу между синхронным и асинхронным, ознакомьтесь с этим вопросом.

...