2017-07-18 3 views
0

Centos Linux sur vmware - gsutil fonctionne mais j'essaie de télécharger des objets à partir du stockage google cloud en utilisant le code python. L'exécution en dessous du code python échoue car je suis derrière un serveur proxy. J'ai essayé d'exporter http_proxy et https_proxy, en l'ajoutant également via .boto (bien que j'imagine que seul gsutil l'utilise). Mais aucun ne fonctionne.Bibliothèque de client de stockage google cloud - derrière proxy - accéder aux objets du compartiment en utilisant le code python?

Je ne trouve aucune mention des paramètres de proxy dans la documentation.

from google.cloud import storage 

storage_client = storage.Client() 
bucket = storage_client.get_bucket('my-bucket') 
blobs=bucket.list_blobs() 

OSError: [Errno 101] Le réseau est inaccessible

* MISE À JOUR 24 JUILLET-17 - RÉSOLU *

re-installed google cloud storage library and my script works fine with HTTP_PROXY set in the env. Not sure about the root cause for initial troubles and I was not able to reproduce the error again unfortunately.

Répondre

0

Le google-cloud python library ne prend pas en charge pour les serveurs proxy. La prise en charge de proxy de gsutil provient de l'utilisation de la bibliothèque boto, vous pouvez donc envisager d'utiliser cette bibliothèque si vous avez besoin d'un support proxy.

+0

Vous pouvez également utiliser https://github.com/google/apitools et transmettre une instance de httplib2 initialisée avec un proxy. C'est ainsi que gsutil fonctionne avec les proxies lors de l'utilisation de l'API GCS JSON. Le code est ici: https://github.com/GoogleCloudPlatform/gsutil/blob/adf221296d77968b8c7c4bde6dccd235664703ac/gslib/util.py#L786 –

+0

@Mike - Ceci est incorrect. la librairie python honore tout paramètre proxy configuré dans l'environnement. Regardez ma réponse ci-dessous. – Tuxdude

+0

@Tuxdude - merci pour la correction. J'avais regardé la source de google-cloud-python quand j'ai posté cette réponse, et je ne me suis pas rendu compte que lib prend indirectement en charge les proxys. Pouvez-vous me montrer où et comment cela s'est fait? Merci. –

0

Bien que, google-cloud python library n'a pas de support pour les proxies directement, il honore HTTPS_PROXY variable d'environnement si elle est définie.

Soit:

export HTTPS_PROXY=https://mycustomproxy.example.com:12345 
python your_python_script.py 

Ou:

export https_proxy=https://mycustomproxy.example.com:12345 
python your_python_script.py 

Vous pouvez également paramétrer directement dans votre script python aussi (de préférence au début):

import os 
os.environ['https_proxy'] = 'https://mycustomproxy.example.com:12345' 

from google.cloud import storage 
storage_client = storage.Client() 
bucket = storage_client.get_bucket('my-bucket') 
blobs=bucket.list_blobs() 

BTW, https_proxy est pris en charge dans le module urllib et par conséquent toutes les bibliothèques (comme google-cloud ici) en utilisant urllib peut utiliser de manière transparente les proxies pour les demandes.

+0

Merci. J'ai exporté https_proxy et http_proxy avant d'exécuter le code. Mais je vais essayer de le mettre en place dans le code pour voir si cela fait une différence. – AlwaysConfused

+0

@AlwaysConfused - Si cela ne fonctionne pas, partagez le format que vous avez utilisé pour la chaîne de proxy. Si votre proxy nécessite une authentification, vous devrez malheureusement inclure le nom d'utilisateur et le mot de passe dans la chaîne proxy. Dans ce cas, je suggère de le faire dynamiquement dans le code afin que vos informations d'identification ne soient jamais enregistrées directement. – Tuxdude

+0

Je pip juste désinstallé la bibliothèque et a rouvert l'installation de pip et il semble fonctionner très bien en utilisant HTTP_PROXY exporté dans la coquille !! C'est un peu inquiétant mais ne sachant pas la raison – AlwaysConfused