proxys - proxy transparente vs no transparente
¿Cómo se usa un proxy HTTP/HTTPS con boto3? (4)
Además de alterar la variable de entorno, presentaré lo que encontré en el código.
Como Boto3 usa Botocore, eché un vistazo a través del código fuente:
https://github.com/boto/botocore/blob/66008c874ebfa9ee7530d944d274480347ac3432/botocore/endpoint.py
Desde este enlace, terminamos en:
def _get_proxies(self, url):
# We could also support getting proxies from a config file,
# but for now proxy support is taken from the environment.
return get_environ_proxies(url)
... que es llamado por proxies = self._get_proxies(final_endpoint_url)
en la clase EndpointCreator
.
Para resumir, si está usando python2 usará el método getproxies de urllib2 y si está usando python3, usará urllib3.
get_environ_proxies
espera un dict que contenga {''http:'' ''url''}
(y supongo que también https
).
Siempre puedes patch
el código, pero esa es una práctica pobre.
En la biblioteca boto
es lo suficientemente simple como para usar los parámetros proxy
, proxy_port
, proxy_user
y proxy_pass
cuando abre una conexión. Sin embargo, no pude encontrar ninguna forma equivalente de definir programáticamente los parámetros proxy en boto3. :(
Desde al menos la versión 1.5.79, botocore acepta un argumento de proxies
en la configuración de botocore.
p.ej
import boto3
from botocore.config import Config
boto3.resource(''s3'', config=Config(proxies={''http'': ''foo.bar:3128''}))
recurso boto3 https://boto3.readthedocs.io/en/latest/reference/core/session.html#boto3.session.Session.resource
botocore config https://botocore.readthedocs.io/en/stable/reference/config.html#botocore.config.Config
Esta es una de las raras ocasiones en las que recomiendo el parche de monos, al menos hasta que los desarrolladores de Boto permitan configuraciones de proxy específicas para la conexión:
import botocore.endpoint
def _get_proxies(self, url):
return {''http'': ''http://someproxy:1234/'', ''https'': ''https://someproxy:1234/''}
botocore.endpoint.EndpointCreator._get_proxies = _get_proxies
import boto3
Si su servidor proxy no tiene contraseña, intente lo siguiente
import os
os.environ["HTTP_PROXY"] = "http://proxy.com:port"
os.environ["HTTPS_PROXY"] = "https://proxy.com:port"
si el usuario del servidor proxy tiene contraseña, intente lo siguiente
import os
os.environ["HTTP_PROXY"] = "http://user:[email protected]:port"
os.environ["HTTPS_PROXY"] = "https://user:[email protected]:port"