#python-3.x #aiohttp
#python-3.x #aiohttp
Вопрос:
На моем компьютере есть 2 сетевых интерфейса.
Я хочу использовать aiohttp
для HTTP-запросов, но с контролем над тем, через какой из 2 интерфейсов проходит запрос. Это эквивалентно возможности указать мой исходный IP-адрес, поскольку они находятся в разных локальных сетях.
Вот решение, использующее неасинхронный requests
модуль:
import requests
def session_for_src_addr(addr: str) -> requests.Session:
session = requests.Session()
for prefix in ('http://', 'https://'):
session.get_adapter(prefix).init_poolmanager(
# those are default values from HTTPAdapter's constructor
connections=requests.adapters.DEFAULT_POOLSIZE,
maxsize=requests.adapters.DEFAULT_POOLSIZE,
# This should be a tuple of (address, port). Port 0 means auto-selection.
source_address=(addr, 0),
)
return session
# usage example:
s = session_for_src_addr('192.168.1.12')
s.get('https://httpbin.org/ip')
Любой способ добиться аналогичного с aiohttp.ClientSession()
помощью?
Комментарии:
1. У меня такая же проблема, пожалуйста, сообщите нам, если вы нашли какое-либо решение. Если решение все еще не существует, единственная возможность выполнять запросы в разных потоках без aiohttp. Но, похоже, это слишком сложное решение для такой «легкой» задачи.
2. Насколько я нашел только этот способ — укажите исходный IP, docs.aiohttp.org/en/v3.7.4.post0/faq.html#id8 Но иногда (как в моем случае) может быть несколько интерфейсов с одним и тем же IP-адресом. Например, если мы подключаемся к нескольким точкам доступа Wi-Fi с одинаковыми настройками по умолчанию или если мы подключаемся к нескольким камерам GoPro. Так что этот способ для меня неприемлем.