2015-11-02 63 views
11

古いbotoライブラリでは、接続を開くときにproxy,proxy_portproxy_userおよびproxy_passのパラメータを使用するのに十分簡単です。しかし、私はプログラムでboto3のプロキシパラメータを定義する同等の方法を見つけることができませんでした。 :(boto3でHTTP/HTTPSプロキシをどのように使用しますか?

+1

瞬間に、私は次のようなものを使用することだ: '輸入OS;はos.environの[」 HTTP_PROXY "] =" http://yourproxy.com:1234 "; os.environ ["HTTPS_PROXY"] = "https://yourproxy1.com:1234"「 – Mani

+0

私はこれがうまくいくことをドキュメンテーションには何の言及も見つかりませんでした。例えば、 'HTTPS_PROXY'を使っているbotoではうまくいかず、' HTTP_PROXY'だけです。 – asieira

+0

とにかく、boto3 GitHubリポジトリに問題がオープンしました:https://github.com/boto/boto3/issues/338 – asieira

答えて

5

を、botocore受け入れボトコア設定のproxies引数。

import boto3 
from botocore.config import Config 

boto3.resource('s3', config=Config(proxies={'http': 'foo.bar:3128'})) 

boto3リソース https://boto3.readthedocs.io/en/latest/reference/core/session.html#boto3.session.Session.resource

botocoreコンフィグ https://botocore.readthedocs.io/en/stable/reference/config.html#botocore.config.Config

+0

私はboto3 == 1.4.6、botocore == 1.6.6を使用していますが、これは私のために働いていないようです。バケツなどにファイルをロードする完全な例を提供してください。 – albarji

+0

AWSはすべてのエンドポイントでHTTPSを使用するため、この設定を試してください: 'boto3.resource( 's3'、config = Config(プロキシ= {'https': 'foo.bar:3128'}))' ** s **) – Brad

9

あなたのユーザのプロキシサーバーを使用すると、ユーザのプロキシサーバは、環境変数を変更することから、など怒鳴る別に

import os 
os.environ["HTTP_PROXY"] = "http://user:[email protected]:port" 
os.environ["HTTPS_PROXY"] = "https://user:[email protected]:port" 
+0

envirion値の前後に引用符を正しく挿入するようにしてください。この回答は、プロキシの冒頭に欠けている – mightymephisto

+0

を指摘してくれてありがとう – user881703

+0

これは動作しますが、環境変数を変更するのは面倒です。プログラムに沿って他のサーバーへのHTTP要求を実行する必要がある場合、そのような要求はs3プロキシサーバー経由でルーティングされますが、これはあなたが望むものではありません。 s3のクエリが終了した後、env変数を元の値に戻すことで解決できますが、より良い解決策が必要でした。 – albarji

1

を試してみてください パスワードを持っているかのように怒鳴る

import os 
os.environ["HTTP_PROXY"] = "http://proxy.com:port" 
os.environ["HTTPS_PROXY"] = "https://proxy.com:port" 

てみ ないパスワードが設定されている場合

boto3はbotocoreを使用しているので、私はソースコードを見ています:クラスにproxies = self._get_proxies(final_endpoint_url)によって呼び出され

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) 

...:このリンクから

https://github.com/boto/botocore/blob/66008c874ebfa9ee7530d944d274480347ac3432/botocore/endpoint.py

は、我々はで終わります。

短い話ですが、python2を使用している場合、urllib2のgetproxiesメソッドが使用され、python3を使用している場合はurllib3が使用されます。

get_environ_proxiesは、{'http:' 'url'}(と私はhttpsも推測しています)を含むdictを期待しています。

あなたはいつもpatchコードを書くことができますが、それは貧弱な方法です。

1

これは私が後のBoto開発者は、接続固有のプロキシ設定できるように、少なくともまで、モンキー・パッチ適用をお勧めしますまれの一つである:少なくともバージョン1.5.79のよう

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 
関連する問題