2014-02-18 83 views
2

我有一个HTTPS代理用python编写。所有工作,直到我使代理透明。我将80443端口重定向到8888(代理端口)。现在只有请求超过HTTP的作品,当我请求HTTPS网站时,我在服务器上得到400401错误。有任何想法吗?当我通过HTTPS发出请求时,我在代理端(日志)看到加密文本,并且我看不到任何CONNECT请求。python https代理错误代码400,401

代理在这个地址:https://github.com/allfro/pymiproxy

但我已经改变了一点作为一个透明的代理工作:

def _connect_to_host(self): 
    # Get hostname and port to connect to 
    if self.is_connect: 
     self.hostname = self.getheader('host') 
     self.port = '443' 
     #self.hostname, self.port = self.path.split(':') 


    else: 
     self.path = "http://" + self.headers.getheader('host') + self.path 

     u = urlparse(self.path) 
+0

您可以发布代理代码? – emcas88

+0

我不确定我们可以提供任何有用的建议,而无需看到一些代码,但您可能需要阅读此链接http://wiki.squid-cache.org/Features/HTTPS。试图代理HTTPS有相当的复杂性,并且您可能会遇到python代理代码中的设计缺陷。那篇文章可能会帮助 – user590028

+0

我编辑了这个问题。 –

回答

0

纠正我,如果这是OT,但你怎么通过HTTPS代理测试您的HTTPS?

Python不支持这个!

也不对curl/libcurl/pycurl

您可以找到支持它虽然浏览器。

而且,我还没有发现任何在你听启用SSL的插槽上的链接github上的代码...

代理图(无耻插头)https://stackoverflow.com/a/20330304/705086

+0

我在FreeBSD机器上运行代理,我已经将端口80和443重定向到服务器侦听的端口。当我使用其他设备连接到网络时,如果我没有指定代理,则它不起作用。它可以工作,如果我使用http://mitmproxy.org/,但问题是这个代理有一些内存泄漏。 –

+0

在链接的github代码中,代理发送CONNECT请求。这里是函数:https://github.com/allfro/pymiproxy/blob/master/src/miproxy/proxy.py#L171。但问题是,如果我使代理透明,CONNECT请求不会发送,所以我必须找到一种方法来处理这种情况。我在HTTP上找到了一种方法(我从请求头中获取主机 - 在HTTP上也是问题),但是在HTTPS上它不起作用,因为我收到加密的请求。 –

+1

如果你在':443'上(通过重定向)实质上听,你应该期望ssl加密的流量。一旦你解密了,那里面应该有一个'CONNECT'命令。请参阅http://stackoverflow.com/a/20330304/705086 –