В каком виде можно передать прокси с логином и паролем? (proxy handler)
Есть код, в который можно передать proxy в таком формате:
proxy = {'http': '207.164.21.34:3128'}
Проблема том, что у меня есть еще логин и пароль для доступа к этому прокси. Я так понимаю, что в таком случае мне нужно передавать прокси в аргумент proxy_handler, но в каком именно формате не понимаю.
Сам код:
def __init__(self, username, password, **kwargs):
"""
:param username: Login username
:param password: Login password
:param kwargs: See below
:Keyword Arguments:
- **auto_patch**: Patch the api objects to match the public API. Default: False
- **drop_incompat_key**: Remove api object keys that is not in the public API. Default: False
- **timeout**: Timeout interval in seconds. Default: 15
- **api_url**: Override the default api url base
- **cookie**: Saved cookie string from a previous session
- **settings**: A dict of settings from a previous session
- **on_login**: Callback after successful login
- **proxy**: Specify a proxy ex: 'http://127.0.0.1:8888' (ALPHA)
- **proxy_handler**: Specify your own proxy handler
:return:
"""
self.username = username
self.password = password
self.auto_patch = kwargs.pop('auto_patch', False)
self.drop_incompat_keys = kwargs.pop('drop_incompat_keys', False)
self.api_url = kwargs.pop('api_url', None) or self.API_URL
self.timeout = kwargs.pop('timeout', 15)
self.on_login = kwargs.pop('on_login', None)
self.logger = logger
user_settings = kwargs.pop('settings', None) or {}
self.uuid = (
kwargs.pop('guid', None) or kwargs.pop('uuid', None) or
user_settings.get('uuid') or self.generate_uuid(False))
self.device_id = (
kwargs.pop('device_id', None) or user_settings.get('device_id') or
self.generate_deviceid())
# application session ID
self.session_id = (
kwargs.pop('session_id', None) or user_settings.get('session_id') or
self.generate_uuid(False))
self.signature_key = (
kwargs.pop('signature_key', None) or user_settings.get('signature_key') or
self.IG_SIG_KEY)
self.key_version = (
kwargs.pop('key_version', None) or user_settings.get('key_version') or
self.SIG_KEY_VERSION)
self.ig_capabilities = (
kwargs.pop('ig_capabilities', None) or user_settings.get('ig_capabilities') or
self.IG_CAPABILITIES)
self.application_id = (
kwargs.pop('application_id', None) or user_settings.get('application_id') or
self.APPLICATION_ID)
# to maintain backward compat for user_agent kwarg
custom_ua = kwargs.pop('user_agent', '') or user_settings.get('user_agent')
if custom_ua:
self.user_agent = custom_ua
else:
self.app_version = (
kwargs.pop('app_version', None) or user_settings.get('app_version') or
Constants.APP_VERSION)
self.android_release = (
kwargs.pop('android_release', None) or user_settings.get('android_release') or
Constants.ANDROID_RELEASE)
self.android_version = int(
kwargs.pop('android_version', None) or user_settings.get('android_version') or
Constants.ANDROID_VERSION)
self.phone_manufacturer = (
kwargs.pop('phone_manufacturer', None) or user_settings.get('phone_manufacturer') or
Constants.PHONE_MANUFACTURER)
self.phone_device = (
kwargs.pop('phone_device', None) or user_settings.get('phone_device') or
Constants.PHONE_DEVICE)
self.phone_model = (
kwargs.pop('phone_model', None) or user_settings.get('phone_model') or
Constants.PHONE_MODEL)
self.phone_dpi = (
kwargs.pop('phone_dpi', None) or user_settings.get('phone_dpi') or
Constants.PHONE_DPI)
self.phone_resolution = (
kwargs.pop('phone_resolution', None) or user_settings.get('phone_resolution') or
Constants.PHONE_RESOLUTION)
self.phone_chipset = (
kwargs.pop('phone_chipset', None) or user_settings.get('phone_chipset') or
Constants.PHONE_CHIPSET)
self.version_code = (
kwargs.pop('version_code', None) or user_settings.get('version_code') or
Constants.VERSION_CODE)
cookie_string = kwargs.pop('cookie', None) or user_settings.get('cookie')
cookie_jar = ClientCookieJar(cookie_string=cookie_string)
if cookie_string and cookie_jar.auth_expires and int(time.time()) >= cookie_jar.auth_expires:
raise ClientCookieExpiredError('Cookie expired at {0!s}'.format(cookie_jar.auth_expires))
cookie_handler = compat_urllib_request.HTTPCookieProcessor(cookie_jar)
proxy_handler = kwargs.pop('proxy_handler', None)
if not proxy_handler:
proxy = kwargs.pop('proxy', None)
if proxy:
warnings.warn('Proxy support is alpha.', UserWarning)
parsed_url = compat_urllib_parse_urlparse(proxy)
if parsed_url.netloc and parsed_url.scheme:
proxy_address = '{0!s}://{1!s}'.format(parsed_url.scheme, parsed_url.netloc)
proxy_handler = compat_urllib_request.ProxyHandler({'https': proxy_address})
else:
raise ValueError('Invalid proxy argument: {0!s}'.format(proxy))
handlers = []
if proxy_handler:
handlers.append(proxy_handler)
# Allow user to override custom ssl context where possible
custom_ssl_context = kwargs.pop('custom_ssl_context', None)
try:
https_handler = compat_urllib_request.HTTPSHandler(context=custom_ssl_context)
except TypeError:
# py version < 2.7.9
https_handler = compat_urllib_request.HTTPSHandler()
handlers.extend([
compat_urllib_request.HTTPHandler(),
https_handler,
cookie_handler])
opener = compat_urllib_request.build_opener(*handlers)
opener.cookie_jar = cookie_jar
self.opener = opener
# ad_id must be initialised after cookie_jar/opener because
# it relies on self.authenticated_user_name
self.ad_id = (
kwargs.pop('ad_id', None) or user_settings.get('ad_id') or
self.generate_adid())
if not cookie_string: # [TODO] There's probably a better way than to depend on cookie_string
if not self.username or not self.password:
raise ClientLoginRequiredError('login_required', code=400)
self.login()
self.logger.debug('USERAGENT: {0!s}'.format(self.user_agent))
super(Client, self).__init__()
Ответы (1 шт):
Автор решения: Eduard Kumskyi
→ Ссылка
Оказалось можно просто в прокси передать следующее:
proxy = 'login:pass@host:port'