PySocks代理身份验证失败

时间:2016-01-27 19:35:21

标签: python sockets proxy imap

我还在尝试创建imap \ pop3代理客户端。首先尝试PHP是here。 现在我尝试使用python。

我找到了answer,这很合适,所以我的代码基于stackowerflow answer,它可以在没有身份验证的情况下用于代理:

class SocksIMAP4SSL(IMAP4_SSL):
    def open(self, host, port=IMAP4_SSL_PORT):
        self.host = host
        self.port = port
        self.sock = create_connection(dest_pair=(host, port), proxy_type=PROXY_TYPE_HTTP, proxy_addr=PROXY_IP,
                                      proxy_port=PROXY_PORT, proxy_rdns=True, proxy_username=PROXY_AUTH_LOGIN,
                                      proxy_password=PROXY_AUTH_PASS)
        # self.sock = socket.create_connection((host, port))
        self.sslobj = ssl.wrap_socket(self.sock, self.keyfile, self.certfile)
        self.file = self.sslobj.makefile('rb')

但是如果我使用代理进行身份验证,它总是因为原因而失败:

socks.HTTPError: 407: Proxy Authentication Required

代理身份验证类型:基本。登录和密码都是正确的。 我做错了什么?

1 个答案:

答案 0 :(得分:0)

我使用https://github.com/Anorov/PySocks,但它不支持HTTP代理的基本身份验证。几行解决了这个问题:

http_headers = [
    b"Connect %s:%s HTTP/1.1" % (addr.encode('idna'), str(dest_port).encode()),
    b"Host: %s" % dest_addr.encode('idna')
]

if username and password:
    http_headers.append(b"Proxy-Authorization: basic %s" % str(b64encode("%s:%s" % (username, password))))

http_headers.append(b"\r\n")

self.sendall(b"\r\n".join(http_headers))