Python 3 urllib + PySocks - 使用 SOCKS4 代理打开 url 失败

B.K*_*Kos 5 python proxy urllib

尝试在 Python 中使用 urllib 和 PySocks 使用 SOCK4 代理打开 URL 失败,并显示

urllib.error.URLError: <urlopen error Socket error: 0x5b: Request rejected or failed>
Run Code Online (Sandbox Code Playgroud)

有人知道可能是什么问题以及为什么会失败吗?或者有人有另一种方法可以使用 SOCKS4 代理在 Python 中打开 URL(尝试过 urllib 和 PySocks 文档示例)?

我检查并发现代理已启动并且应该可以工作(与其他人尝试过 - 在使用 SOCKS4 作为方案时总是失败)。使用 HTTP 作为代理工作得很好 - proxy = proxies[1]

import socks
import socket
from sockshandler import SocksiPyHandler
import contextlib
from urllib import request

TIMEOUT = 50

if __name__ == '__main__':

    headr = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X  vAppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}

    proxies = [("SOCKS4","88.198.224.84", 4145), ("HTTP","159.69.91.65", 3128)]
    proxy = proxies[0]
    teipe = socks.PROXY_TYPE_SOCKS4
    if proxy[0] == "SOCKS4":
        teipe = socks.PROXY_TYPE_SOCKS4
    elif proxy[0] == "HTTP":
        teipe = socks.PROXY_TYPE_HTTP
    #socks.setdefaultproxy(teipe, proxy[1], proxy[2])
    #socket.socket = socks.socksocket
    shandler = SocksiPyHandler(teipe, proxy[1], proxy[2])

    baseurl = "https://google.com/"
    opener = request.build_opener(shandler)
    request.install_opener(opener)

    req = request.Request(baseurl, data=None, headers=headr)
    with contextlib.closing(request.urlopen(req, timeout=TIMEOUT)) as googl:
        print("Opened " + baseurl + " with " + str(request.getproxies()))
Run Code Online (Sandbox Code Playgroud)

调试错误对我没有帮助 - error.reason.socket_err 是:

SOCKS4Error: 0x5b: Request rejected or failed
Run Code Online (Sandbox Code Playgroud)