2016-04-28 16 views
1

私は、requestsライブラリをいくつかのPythonコードで使用していましたが、私は企業のプロキシサーバーの暗い海域をナビゲートする助けが必要です。これまでリクエストライブラリのプロキシを無効にする

response = requests.get(url, proxies={...}) 

すべて良い:

は、次のコードを考えてみましょう。 requestsコールは、それに渡されたプロキシを使用します。次の例では

requestsは環境変数で定義されたプロキシを使用していますHTTP_PROXYHTTPS_PROXY

response = requests.get(url) 

(それが行くと、環境変数を見てトリガーなしにproxiesパラメータのデフォルト値。)

私がしたいことは、違ったものです。環境変数をそのまま使用したいのは、私が使用している他のアプリケーションに必要であるからです。しかし、私はプロキシを使用しないように要求したい。私は試しました:

しかし、requestsはまだ変わり、環境変数プロキシを取得します。自分の環境変数を設定しなくても、それをやめさせることはできません。

アイデア?

答えて

3

trust_env variable on the sessionFalseに設定します。そうでない場合は真(Trueがデフォルトです)、環境からプロキシ情報は完全に無視されます。

session = requests.Session() 
session.trust_env = False 
response = session.get(url) 

これも.netrc authenticationサポートを無効ありません。あなたがまだあることを必要とする場合は、私が見ることができる2つのオプションがあります。

  • NO_PROXY環境変数を追加します。 *に設定すると、プロキシをまったく使用しないことを意味します。これを行うには、os.environ辞書のキーを直接設定します。

  • os.environからプロキシキーを削除するだけです。

    OSXとWindowsでPythonはシステム構成のプロキシも探します(Windowsではレジストリ、Mac OS XではSysConf)。

os.environを変更することは安全です。これは正規の辞書であり、プログラム内のキーを追加または削除しても問題ありません。親のシェル環境は変更されません。

+0

なぜ「NO_PROXY」は機能しますか?内部的に 'requests'は、' _proxy'という形式の環境変数を探す 'urllib.getproxies()'(これをチェックするためにソースコードを掘り下げました)を呼び出します。どのように新しい環境変数は、環境変数のスペースを使ってこの一見ブルートフォース検索をオーバーライドできますか? –

+1

@AkshatMahajan:あなたは 'should_bypass_proxy()'コールを見逃しました。 –

+0

ニース。いいキャッチ! –

関連する問題