webdevqa.jp.net

リクエスト:プロキシを無効化/バイパスする方法

私はURLを取得しています:

r = requests.get("http://myserver.com")

「myserver.com」の「access.log」で確認できるように、クライアントのシステムプロキシが使用されます。しかし、requestsでプロキシの使用をまったく無効にします。

38
t777

プロキシを完全に無効にするために私が現在知っている唯一の方法はです:

  • セッションを作成する
  • session.trust_envFalseに設定します
  • そのセッションを使用してリクエストを作成します
import requests

session = requests.Session()
session.trust_env = False

response = session.get('http://www.stackoverflow.com')

これは、 Lukasaによるこのコメント および requests.Session.trust_env の(制限付き)ドキュメントに基づいています。

注:trust_envFalseに設定すると、次も無視されます。

  • .netrcからの認証情報( code
  • REQUESTS_CA_BUNDLEまたはCURL_CA_BUNDLEで定義されているCAバンドル(- code

ただし、特定のドメイン(localhostなど)のプロキシのみを無効にする場合は、 NO_PROXY環境変数 を使用できます。

import os
import requests

os.environ['NO_PROXY'] = 'stackoverflow.com'

response = requests.get('http://www.stackoverflow.com')
83
Lukas Graf

リクエストごとにプロキシを選択できます。 ドキュメント から:

import requests

proxies = {
  "http": "http://10.10.1.10:3128",
  "https": "http://10.10.1.10:1080",
}

requests.get("http://example.org", proxies=proxies)

したがって、プロキシを無効にするには、それぞれをNoneに設定します。

import requests

proxies = {
  "http": None,
  "https": None,
}

requests.get("http://example.org", proxies=proxies)
41
jtpereyda

ライブラリが環境変数を尊重することを要求します。 http://docs.python-requests.org/en/latest/user/advanced/#proxies

したがって、環境変数HTTP_PROXYおよびHTTPS_PROXYを削除してみてください。

import os
for k in list(os.environ.keys()):
    if k.lower().endswith('_proxy'):
        del os.environ[k]
1
KostasT

リクエスト/ urllibがリクエストをプロキシするのを停止する方法は、no_proxy(またはNO_PROXY)環境変数を*に設定することです。 bashで:

export no_proxy='*'

またはPythonから:

import os
os.environ['no_proxy'] = '*' 

これが機能する理由を理解するには、 rllib.request.getproxies 関数が環境変数(http_proxyなど)で設定されたプロキシを最初にチェックするか、何も設定されていない場合、システム設定のプロキシを使用してチェックするためですプラットフォーム固有の呼び出し(たとえば、MacOSではシステムscutil/configdインターフェイスを使用してチェックし、Windowsではレジストリをチェックします)。

次に、urllibがproxyHandler関数のプロキシを使用しようとすると、no_proxy環境変数の存在と設定を確認します。これは、上記のように特定のホスト名に設定するか、設定できますすべてのホストがプロキシをバイパスする特別な*値。

0
Pierz