Sur l'ancienne bibliothèque boto
, il était assez simple d'utiliser les proxy
, proxy_port
, proxy_user
et proxy_pass
paramètres lorsque vous ouvrez une connexion. Cependant, je n'ai trouvé aucun moyen équivalent de définir par programme les paramètres de proxy sur boto3. :(
Depuis au moins la version 1.5.79, botocore accepte un argument proxies
dans la configuration botocore.
par exemple.
import boto3
from botocore.config import Config
boto3.resource('s3', config=Config(proxies={'https': 'foo.bar:3128'}))
ressource boto3 https://boto3.readthedocs.io/en/latest/reference/core/session.html#boto3.session. Session.resource
configuration botocore https://botocore.readthedocs.io/en/stable/reference/config.html#botocore.config.Config
Si votre serveur proxy utilisateur n'a pas de mot de passe, essayez comme ci-dessous
import os
os.environ["HTTP_PROXY"] = "http://proxy.com:port"
os.environ["HTTPS_PROXY"] = "https://proxy.com:port"
si votre serveur proxy utilisateur a un mot de passe, essayez comme ci-dessous
import os
os.environ["HTTP_PROXY"] = "http://user:[email protected]:port"
os.environ["HTTPS_PROXY"] = "https://user:[email protected]:port"
Outre la modification de la variable d'environnement, je présenterai ce que j'ai trouvé dans le code.
Puisque boto3 utilise botocore, j'ai jeté un œil au code source:
De ce lien, on se retrouve à:
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)
... qui est appelée par proxies = self._get_proxies(final_endpoint_url)
dans la classe EndpointCreator
.
Pour faire court, si vous utilisez python2, il utilisera la méthode getproxies
d'urllib2 et si vous utilisez python3, il utilisera urllib3.
get_environ_proxies
Attend un dict contenant {'http:' 'url'}
(Et je suppose que https
aussi).
Vous pouvez toujours patch
le code, mais c'est une mauvaise pratique.
C'est l'une des rares occasions où je recommanderais le patch de singe, au moins jusqu'à ce que les développeurs Boto autorisent les paramètres de proxy spécifiques à la connexion:
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