【问题标题】:How to pass all Python's traffics through a http proxy?如何通过 http 代理传递所有 Python 的流量?
【发布时间】:2015-10-16 20:24:52
【问题描述】:

我想通过 http 代理服务器传递所有 Python 的流量,例如,我检查了 urlib2 和请求包,它们可以配置为使用代理,但是我如何使用 Python 的系统范围代理之类的东西来代理所有数据出?

【问题讨论】:

  • 系统范围的代理是什么意思,如何配置?如果有,你应该把它解压并设置在 urllib2 中。
  • 我的意思是,我不想只为特定的 Python 库(如请求)使用代理,而是希望通过代理传递源自运行我的脚本的 Python 进程的所有流量。
  • 我认为您正试图从错误的方向解决这个问题。如果您需要“系统范围的代理”之类的东西,您应该尝试在网络级别解决此问题。我认为 urllib 或请求库没有系统范围的配置文件。
  • 什么样的脚本?我假设你有一个 shell 脚本可以启动几个 python 进程,并且你希望它们使用代理。

标签: python python-2.7 proxy reverse-proxy


【解决方案1】:

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脚本

$ python my_script.py

更新

你也可以使用redsocks 使用此工具,您可以将所有 TCP 连接静默重定向到代理,无论是否进行身份验证。但是你必须小心,因为它不仅适用于 python,而且适用于所有连接。

Windows 系统您可以使用freecapproxifierproxycap 等工具,并配置为在 python 可执行文件后面运行

【讨论】:

  • @efirvida 它在我的情况下不起作用:stackoverflow.com/questions/48676514/… 我在发布这个问题后遇到了你的答案。我试着像你在这里说的那样导出代理,然后 os.environ... 但是错误仍然存​​在。
  • 面临编码 = binascii.b2a_base64(s, newline=False) TypeError: a bytes-like object is required, not 'str'
  • @zhilevan,我不知道那个错误,但也许可以试试这个解决方案:stackoverflow.com/questions/45482272/…
  • 刚刚尝试过,将其分配给四个环境变量后,进程卡住了。日志也没有出来。
【解决方案2】:

诚然,这并不是您正在寻找的内容,但如果您知道 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

他们在那里提到不推荐这样做,但它似乎对我来说效果很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 2013-12-24
    • 2017-06-01
    • 2018-08-17
    相关资源
    最近更新 更多