Socks set_default_proxy 会在 Ubuntu 上引发错误,但不会在 OSX 或 Windows 上引发错误

Socks set_default_proxy throws an error on Ubuntu but not on OSX or Windows

这是导致错误的代码部分。它在 OSX 和 Windows.

上运行良好
def sslwrap(func):
    @wraps(func)
    def bar(*args, **kw):
        kw['ssl_version'] = ssl.PROTOCOL_TLSv1
        return func(*args, **kw)
    return bar
ssl.wrap_socket = sslwrap(ssl.wrap_socket)
if sys.platform == "darwin":
    requests.packages.urllib3.disable_warnings()
socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 4050)
socket.socket = socks.socksocket

这是我在 Ubuntu 服务器上遇到的错误:

Traceback (most recent call last): File "new.py", line 42, in socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 9050) AttributeError: 'module' object has no attribute 'set_default_proxy'

对发生的事情有什么想法吗?很可能是 sockspy 库中的错误吗?

看起来函数 socks.set_default_proxy(...) 最近被重命名了;该库的早期版本拼写时没有下划线,如 socks.setdefaultproxy(...)。您的 Ubuntu 服务器上可能安装了这些先前版本之一。

您可以有时通过尝试函数名称的两种拼写来解决这个问题,例如:

try:
  sdp = socks.set_default_proxy
except AttributeError:
  sdp = socks.setdefaultproxy
sdp(socks.SOCKS5, "127.0.0.1", 4050)

强调有时;这本身可能还不够,因为 SocksiPy 的 API 看起来随着时间和一系列不同的维护者发生了重大变化。

资料来源:咨询 PySocks README, the socksipy-x README,以及之前的一对夫妇。