Почему не работает асинхронный код python под прокси?
Настроил проксифаер на python.exe в виртуальном окружении моего небольшого скрипта. Использую SOCKS5 (пробовал и HTTP) прокси, тестировал их, все работает. До асинхронной части кода все работает нормально. Но как только дело доходит до асинхронной части, его работа прекращается, просто бесконечное ожидание без исключений. Без проксифаера все работает как надо.
Второй момент. Под проксифаером, при попытке запустить код в режиме отладки в pycharm срабатывает это исключение ConnectionRefusedError: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение
Дополнительно:
Показывайте код.
from telethon import TelegramClient import socks import json import asyncio proxy = { 'proxy_type': socks.HTTP, 'addr': 'addr', 'port': port, 'username': 'username', 'password': 'password' } with open('file.json', 'r') as file: client_data = json.load(file) channel = 'https://t.me/channel' async def main(): # на этом конец async with TelegramClient(client_data['session_file'], api_id=client_data['app_id'], api_hash=client_data['app_hash'], app_version=client_data['app_version'], device_model=client_data['device'], system_version=client_data['sdk'], proxy=proxy) as client: me = await client.get_me() print(me.stringify()) asyncio.run(main()) |
from telethon import TelegramClient import socks import json import asyncio proxy = { 'proxy_type': socks.HTTP, 'addr': 'addr', 'port': port, 'username': 'username', 'password': 'password' } with open('file.json', 'r') as file: client_data = json.load(file) channel = 'https://t.me/channel' async def main(): # на этом конец async with TelegramClient(client_data['session_file'], api_id=client_data['app_id'], api_hash=client_data['app_hash'], app_version=client_data['app_version'], device_model=client_data['device'], system_version=client_data['sdk'], proxy=proxy) as client: me = await client.get_me() print(me.stringify()) asyncio.run(main())
Не важно что в функции Main, пробовал разное, ничего не меняется
Ответы:
Посмотрите этот код, может, поможет:
import asyncio
import os
import time
import random
from time import perf_counter
import aiohttp
import aiofiles
SITE = 'https://thispersondoesnotexist.com/'
IMAGE_COUNT = 50
PROXY = ''
def generate_filename(file_extension):
temp = str(int(time.time()))
for _ in range(5):
temp += chr(random.randint(65, 75))
return f'{temp}.{file_extension}'
async def download_image(image_num):
async with aiohttp.ClientSession() as session:
async with session.get(SITE, proxy=f'http://{PROXY}') as response:
extension = response.headers['content-type'].split('/')[-1]
filename = os.path.join('Images_async', generate_filename(extension))
async with aiofiles.open(filename, mode='wb') as file:
async for chunk in response.content.iter_chunked(64 * 1024):
await file.write(chunk)
print(f'image {image_num + 1} finished...')
async def main():
image_tasks = []
for image_num in range(IMAGE_COUNT):
image_tasks.append(asyncio.create_task(download_image(image_num)))
await asyncio.gather(*image_tasks)
if __name__ == '__main__':
start = perf_counter()
asyncio.run(main())
print(f'time: {(perf_counter() - start):.02f}')
Я этот код увидел в процессе обучения. Он работает.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для того чтобы понять, почему асинхронный код на Python может не работать под прокси, нужно учитывать несколько возможных причин.
1. Прокси-сервер блокирует асинхронные запросы: Некоторые прокси-серверы могут блокировать асинхронные запросы из-за своих настроек безопасности. В этом случае вам нужно проверить настройки прокси-сервера и возможно изменить их для поддержки асинхронного кода.
2. Проблемы с подключением к прокси: Иногда возникают проблемы с подключением к прокси-серверу из-за неправильных настроек или недоступности сервера. Убедитесь, что вы правильно сконфигурировали ваш код для работы с прокси и что прокси-сервер доступен.
3. Неправильная обработка исключений: Ваш асинхронный код может не обрабатывать исключения, возникающие при работе через прокси. Убедитесь, что ваш код содержит соответствующие обработчики исключений для работы с прокси.
Приведу пример кода на Python, который может помочь вам работать с асинхронными запросами через прокси:
import aiohttp import asyncio async def fetch(url, proxy): async with aiohttp.ClientSession() as session: async with session.get(url, proxy=proxy) as response: return await response.text() async def main(): url = 'https://example.com' proxy = 'http://yourproxy.com:8080' html = await fetch(url, proxy) print(html) loop = asyncio.get_event_loop() loop.run_until_complete(main())
Убедитесь, что вы правильно сконфигурировали параметры прокси (в данном случае proxy) и обработали возможные исключения для успешной работы вашего асинхронного кода под прокси.