python-2.7 - requests - socks set_default_proxy




ターミナルからSOCKS5を使用するときのPythonの要求「SOCKSサポートの依存関係がありません」 (5)

Pythonの要求に依存するパッケージを使用して、Python 2.7シェルからAPIとやりとりしようとしています。 私のネットワーク(大学図書館)によってリモートアドレスがブロックされていますか?

だから私はAPIを話すために次のことを行います:

~$ ssh -D 8080 [email protected].com

そして、新しい端末で、ローカルコンピュータで:

~$ export http_proxy=socks5://127.0.0.1:8080 https_proxy=socks5://127.0.0.1:8080

その後、私はPythonコンソールでプログラムを実行しますが、失敗します。

~$ python
>>> import myscript
>>> id = '1213'
>>> token = 'jd87jd9'
>>> connect(id,token)

File "/home/username/.virtualenvs/venv/local/lib/python2.7/site-packages/requests/sessions.py", line 518, in post
    return self.request('POST', url, data=data, json=json, **kwargs)
  File "/home/username/.virtualenvs/venv/local/lib/python2.7/site-packages/requests/sessions.py", line 475, in request
    resp = self.send(prep, **send_kwargs)
  File "/home/username/.virtualenvs/venv/local/lib/python2.7/site-packages/requests/sessions.py", line 585, in send
    r = adapter.send(request, **kwargs)
  File "/home/username/.virtualenvs/venv/local/lib/python2.7/site-packages/requests/adapters.py", line 370, in send
    conn = self.get_connection(request.url, proxies)
  File "/home/username/.virtualenvs/venv/local/lib/python2.7/site-packages/requests/adapters.py", line 273, in get_connection
    proxy_manager = self.proxy_manager_for(proxy)
  File "/home/username/.virtualenvs/venv/local/lib/python2.7/site-packages/requests/adapters.py", line 169, in proxy_manager_for
    **proxy_kwargs
  File "/home/username/.virtualenvs/venv/local/lib/python2.7/site-packages/requests/adapters.py", line 43, in SOCKSProxyManager
    raise InvalidSchema("Missing dependencies for SOCKS support.")
requests.exceptions.InvalidSchema: Missing dependencies for SOCKS support.

この抜粋は、 adapters.py要求モジュールからの抜粋です

> try:
>     from .packages.urllib3.contrib.socks import SOCKSProxyManager except ImportError:
>     def SOCKSProxyManager(*args, **kwargs):
>         raise InvalidSchema("Missing dependencies for SOCKS support.")

今、問題はurllib3のSOCKSProxyManagerで発生しているようです。

だから私はあなたがPySocksをインストールした場合、またはpipをインストールするとSOCKS5でSOCKSProxyManagerを使うことができると読んでいます。urllib3 [socks]

悲しいかな、私はPySocksとurllib3の両方を成功させることなくSocksで試しました。

別の回避策の考えですか?

編集:

私はピップインストール要求(靴下)を試してみました(これは靴下サポートの2.10.0です)、私はこれを得ています:

  File "/home/username/.virtualenvs/venv/local/lib/python2.7/site-packages/requests/adapters.py", line 467, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: SOCKSHTTPSConnectionPool(host='api-server.com', port=443): Max retries exceeded with url: /auth (Caused by NewConnectionError('<requests.packages.urllib3.contrib.socks.SOCKSHTTPSConnection object at 0x95c7ccc>: Failed to establish a new connection: SOCKS5 proxy server sent invalid data',))

私はrequests[socks]>=2.10.0を私のrequirements.txtに追加し、 https_proxy env変数を更新し、上記のエラーに遭遇しました。 私は、 https_proxy env変数をリセットしhttps_proxy pip install requests[socks]した後、通常のpip install requests[socks]PySocksた。 pip install -Ur requirements.txtなぜ、requirements.txtが初めてPySocksをインストールできなかったのか分かりません。

その後、私はソックスプロキシを使用してPythonでリクエストを行うことができました。

あなたのソックスサーバーが動作していないようです。 あなたや管理者がログを見て、マシンが何を不満しているかを確認できます。


私はcondaと要求で同じ問題を抱えていた2.11(私は会社のプロキシの背後にあるUbuntu VMで働いています)。

この問題は私を助けました。 私の環境変数all_proxy (元々はSOCKプロキシsocks://....設定されていた)を.bashrcファイルのhttpsバージョンに変更しました:

export all_proxy="https://<proxy>:<port>/"

今はそれが動作します。


私はまた、簡単なpip install -U pipを行っている間にこの問題を偶然見つけましたが、あなたの質問から私が見つけた情報が私の問題を解決するのに役立ちました。 私はMac OS X上にいる。

あなたが指摘したrequestsrequestsパッケージのadapters.pyはこれをしようとしていました:

try:
    from .packages.urllib3.contrib.socks import SOCKSProxyManager
except ImportError:
    def SOCKSProxyManager(*args, **kwargs):
        raise InvalidSchema("Missing dependencies for SOCKS support.")

ですから、SOCKSProxyManagerの定義の場所を探すのは賢明です 。 それはurllib3の "contrib"モジュールのようで、デフォルトでurllib3と一緒にインストールされません。 そのモジュールのdocstringはこう言っています:

This module contains provisional support for SOCKS proxies from within
urllib3. This module supports SOCKS4 (specifically the SOCKS4A variant) and
SOCKS5. To enable its functionality, either install PySocks or install this
module with the ``socks`` extra.

pip docの指示には、setuptoolsに関する追加情報があります:

6. Install a package with setuptools extras.

$ pip install SomePackage[PDF]
$ pip install git+https://git.repo/some_pkg.git#egg=SomePackage[PDF]
$ pip install SomePackage[PDF]==3.0
$ pip install -e .[PDF]==3.0  # editable project in current directory

だから私は指示に従って、やった:

$ pip install 'urllib3[socks]'

私はその後、私がやろうとしていたpip install -U pip続け、今は動作します。

Bashや他のシェルは、特殊文字として扱うことが多く、呼び出されたプログラム(この場合はpip)に到達するためにはエスケープする必要があるため、どのくらい多くの人が角括弧で欺かれているのだろうかと思います。


これは、要求がプロキシとしてソックスを使用しており、ソックスがインストールされていないことを意味します。

pip install pysocks実行pip install pysocks


私の環境はUbuntu 16.4 LTSとPython3.5.2です.pip3を使ってlibsをインストールするのと同じ問題があります。 unset ALL_PROXY 、この問題を解決するためにコマンドunset ALL_PROXYを使用しています。

PS:use printenv | grep -i proxy printenv | grep -i proxyプロキシ情報を表示します。