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}') и он ВСЕ еще начинает с видео, хотя раньше начинал с фото и также долго "зависает". какой то бред.