Python aiohttp, не работает подключение через VPN

Написал скрипт, который парсит медиа и загружает. Асинхронный и синхронный варианты. В синхронном использую requests. В асинхронном aiohttp, asyncio и aiofiles соответственно.

Проблема в том, что я, работая из под ВПН (psiphon) обхожу блокировку. С requests это прокатывало - все подключалось и скачивалось, довольно быстро.

Но aiohttp этот VPN "не видит". Блокировка не обходится и соответственно ресурс блокируется. В чем разница между aiohttp и requests? Какие подходы они используют и какое может быть решение проблемы?

код:

import requests
from fake_useragent import UserAgent
import datetime
import asyncio
import aiofiles
import aiohttp
import shutil
import os


ua = UserAgent()
bypass = ua.random
print(bypass)
headers = {
    'user-agent' : bypass
}


urls = ['URL LIST']

shutil.rmtree('ASYNC')
shutil.rmtree('SYNC')
os.mkdir('ASYNC')
os.mkdir('SYNC')

def sync():

    start_sync = datetime.datetime.now()

    for url in urls:
        name = url.split('/')[-1]
        response = requests.get(url, stream=True, headers=headers)
        with open(f'SYNC/{name}', 'wb') as f:
            for chunk in response.iter_content(chunk_size=8192):
                f.write(chunk)
        print(f'{url} : {response}')
    end_sync = datetime.datetime.now()
    dur = end_sync - start_sync
    print(dur.total_seconds())

def asyncc():


    async def parser(url, session):
        name = url.split('/')[-1]
        
        async with session.get(url, headers=headers) as response:

            if response.status == 200:
                print(f'{url} : {response.status}')

                async with aiofiles.open(f'ASYNC/{name}', 'wb') as f:
                    content = await response.content.read()
                    await f.write(content)

            else:
                print('==== ERROR ====')
    
    async def gather_data():

            connector = aiohttp.TCPConnector(ssl=False,)
            async with aiohttp.ClientSession(connector=connector) as session:            
                tasks = []
                for url in urls:
                    task = asyncio.create_task(parser(url, session))
                    tasks.append(task)

                await asyncio.gather(*tasks)
    start = datetime.datetime.now()
    asyncio.run(gather_data())
    end = datetime.datetime.now()
    curr_time = end - start
    print(curr_time.total_seconds())

sync()
asyncc()

в случае requests я просто запускал впн и все подключалось. с aiohttp так не канает.

upd1: проверил cloudfare WARP - работает быстро, не заблокан. повезло. но я заметил еще одну странность - мой асинк код очень медленно скачивает именно видео. картинки моментально улетают. возможно проблема не только в ВПН?

upd2: мой асинхронный код на скачивание "зависает" на видео - он их скачивает (не знаю за сколько), но к следующим задачам не переходит. в чем причина?

upd3: раньше скрипт начинал со скачивания фото. сейчас начинает с видео и "зависает" на них (т.е. он их скачал, и к фото не переходит)

upd4: psiphon не работает с aiohttp, а cloudfare WARP с requests :/ requests.exceptions.SSLError: HTTPSConnectionPool(host='HOSTSAME', port=443): Max retries exceeded with url: URL (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate (_ssl.c:992)')))

отключил SSL, теперь тупо не загружается, или загружается настолько медленно, что я не могу это отследить.

upd5: я уже даже отключил скачивание, просто print(f'{response.url} : {response.status}') и он ВСЕ еще начинает с видео, хотя раньше начинал с фото и также долго "зависает". какой то бред.


Ответы (0 шт):