PySocks 代理身份验证失败
PySocks proxy auhtentication failed
我仍在尝试创建 imap\pop3 代理客户端。第一次尝试是 PHP 是 here。
现在我用 python.
做同样的尝试
我找到了一个 answer, which good fits, so my code based is on 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
代理身份验证类型:基本。登录名和密码都正确。
我做错了什么?
我使用了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))
我仍在尝试创建 imap\pop3 代理客户端。第一次尝试是 PHP 是 here。 现在我用 python.
做同样的尝试我找到了一个 answer, which good fits, so my code based is on 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
代理身份验证类型:基本。登录名和密码都正确。 我做错了什么?
我使用了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))