web-dev-qa-db-ja.com

Pythonのすべてのトラフィックをhttpプロキシ経由で渡す方法は?

すべてのPythonのトラフィックをhttpプロキシサーバー経由で渡したい場合、urlib2をチェックして、たとえばパッケージをリクエストします。プロキシを使用するように設定できますが、Pythonのシステム全体のプロキシを使用するにはすべてのデータをプロキシしますか?

16
habedi

Linuxシステム最初にこのような環境変数をエクスポートします

$ export http_proxy="http://<user>:<pass>@<proxy>:<port>"
$ export HTTP_PROXY="http://<user>:<pass>@<proxy>:<port>"

$ export https_proxy="http://<user>:<pass>@<proxy>:<port>"
$ export HTTPS_PROXY="http://<user>:<pass>@<proxy>:<port>"

または、プロキシを通過させるスクリプト内

import os

proxy = 'http://<user>:<pass>@<proxy>:<port>'

os.environ['http_proxy'] = proxy 
os.environ['HTTP_PROXY'] = proxy
os.environ['https_proxy'] = proxy
os.environ['HTTPS_PROXY'] = proxy

#your code goes here.............

その後、python script

$ python my_script.py

[〜#〜] update [〜#〜]

また、このツールで redsocks を使用することもできます。すべてのTCP接続を認証ありまたは認証なしでPROXYにサイレントでリダイレクトできます。すべての接続はpythonだけではありません。

Windowsシステムfreecapproxifierproxycap などのツールを使用できます=、およびpython実行可能ファイルの背後で実行するように構成します

25
efirvida

確かに、これはまさにあなたが探しているものではありませんが、pythonコードですべてのネットワークトラフィックのプログラムソースを知っている場合は、コード自体でこのプロキシラッピングを行うことができます。次のリンクのPySocksモジュールを使用して、純粋なpythonソリューションを提案します。

https://github.com/httplib2/httplib2/issues/22

import httplib2
# detect presense of proxy and use env varibles if they exist
pi = httplib2.proxy_info_from_environment()
if pi:
    import socks
    socks.setdefaultproxy(pi.proxy_type, pi.proxy_Host, pi.proxy_port)
    socks.wrapmodule(httplib2)    

# now all calls through httplib2 should use the proxy settings
httplib2.Http()

これで、httplib2を使用して行われたすべての呼び出しは、これらのプロキシ設定を使用します。このプロキシを使用するためにソケットを使用するネットワークモジュールをラップできる必要があります。

https://github.com/Anorov/PySocks

彼らは、これは推奨されていないと述べていますが、私にとってはうまく機能しているようです。

4
chisaipete