Sur la vieille bibliothèque boto
était assez simple d'utiliser les paramètres proxy
, proxy_port
, proxy_user
et proxy_pass
lorsque vous ouvrez une connexion. Cependant, je n'ai pas trouvé de moyen équivalent de définir par programme les paramètres du proxy sur boto3. :(Comment utilisez-vous un proxy HTTP/HTTPS avec boto3?
Répondre
Comme d'au moins la version 5.1.79, botocore accepte un argument proxies
dans la config botocore.
par exemple.
import boto3
from botocore.config import Config
boto3.resource('s3', config=Config(proxies={'http': 'foo.bar:3128'}))
boto3 ressources 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
J'utilise boto3 == 1.4.6, botocore == 1.6.6, mais cela ne semble pas fonctionner pour moi. Pourriez-vous s'il vous plaît fournir un exemple complet de chargement d'un fichier dans un seau, ou quelque chose de similaire? – albarji
Depuis AWS utilise HTTPS pour tous les points de terminaison, essayez cette configuration: 'boto3.resource ('s3', config = Config (proxies = {'https': 'foo.bar:3128'}))' (Notez que c'est http ** s **) – Brad
Si votre serveur proxy utilisateur n'a pas le mot de passe essayer 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 Mot de passe essayer comme ci-dessous
import os
os.environ["HTTP_PROXY"] = "http://user:[email protected]:port"
os.environ["HTTPS_PROXY"] = "https://user:[email protected]:port"
Bien que vous vous assurez d'inclure correctement les citations autour de vos valeurs envirion. Cette réponse les a manquantes au début du proxy – mightymephisto
merci de signaler – user881703
Cela fonctionne, mais changer une variable d'environnement est gênant. Si le long de votre programme vous devez effectuer une requête http vers un autre serveur, cette requête sera acheminée via le serveur proxy s3, ce qui n'est pas ce que vous voulez. Vous pouvez résoudre ce problème en restaurant les deux variables env à leurs valeurs d'origine après avoir fini d'interroger s3, mais j'aurais aimé qu'il y ait une meilleure solution. – albarji
En plus de modifier la variable d'environnement , Je vais présenter ce que j'ai trouvé dans le code
Depuis boto3 utilise botocore, j'ai jeté un oeil à travers le code source:
https://github.com/boto/botocore/blob/66008c874ebfa9ee7530d944d274480347ac3432/botocore/endpoint.py
De ce lien, on finit à:
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é par proxies = self._get_proxies(final_endpoint_url)
dans la classe EndpointCreator
. En bref, si vous utilisez python2, il utilisera la méthode getproxies
de urllib2 et si vous utilisez python3, il utilisera urllib3.
get_environ_proxies
attend une dict contenant {'http:' 'url'}
(et je devine https
aussi).
Vous pourriez toujours patch
le code, mais c'est une mauvaise pratique.
Ceci est l'une des rares occasions où je recommande ragréage de singe, au moins jusqu'à ce que les développeurs Boto permettent des réglages 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
En ce moment, je vais avoir à utiliser quelque chose comme: 'import os; os.environ [ » HTTP_PROXY "] =" http://yourproxy.com:1234 "; os.environ ["HTTPS_PROXY"] = "https://yourproxy1.com:1234" ' – Mani
Je n'ai trouvé aucune mention dans la documentation que cela fonctionnerait. Par exemple, sur boto en utilisant 'HTTPS_PROXY' ne fonctionnerait pas, seulement' HTTP_PROXY'. – asieira
Quoi qu'il en soit, a ouvert un problème sur le dépôt GitoHub boto3: https://github.com/boto/boto3/issues/338 – asieira