具有代理连接的HTTP / s流

时间:2017-05-04 10:23:42

标签: python html http https proxy

这几天我正在写一个转发代理人。

我遇到过HTTP / s代码的三个问题。 第一个是每当我试图处理重定向[302](例如来自www.google.com)时,我都没有得到任何数据。 我正在使用以下代码处理重定向:

try:
    response = requests.get("http://"+webserver, timeout=2)
    if response.history:
        print "Redirected to " + response.url
        c = httplib.HTTPSConnection(response.url, port,config['CONNECTION_TIMEOUT'])
    else:
        print "Getting information from " + webserver
        c = httplib.HTTPSConnection(webserver, port,config['CONNECTION_TIMEOUT'])
except requests.exceptions.ConnectionError:
    print "Getting information from " + webserver
    c = httplib.HTTPSConnection(webserver)

如果我试图通过直接连接到重定向网址来绕过第一个错误,则会出现第二个问题。我从网站收到的数据(任何受http / s保护的网站,例如其www.google.co.il)包含不需要的字符,例如那些问号: 而不是希伯来语或阿拉伯语中的单词(英语工作得很好。

我正在使用此代码处理数据:

               c = httplib.HTTPSConnection(webserver)
               while 1:
                    c.request("GET", "/")
                    response = c.getresponse()
                    # send request to web server
                    # Indiscriminately forward bytes
                    data = response.read()  # NEED TO DECODE
                    print "DATA : ", data
                    if len(data) > 0:
                        conn.send(data)
                        print "DATA SENT!"
                    else:
                        break
                c.close()
                conn.close()

这是我收到的数据(我不能在此处包含所有内容,因此这是包含数据html预览的照片):The data

我遇到的最后一个问题是数据没有发送到浏览器。代理接收数据(正如您在第二个问题中看到的那样),但由于某种原因,它不会将数据转发到浏览器。 (代码与第二个问题相同)。

浏览器显示此错误:ERR_TUNNEL_CONNECTION_FAILED

非常感谢任何帮助!

提前致谢,Yahli

*编辑:仍然找不到答案。我需要你的帮助:)

1 个答案:

答案 0 :(得分:1)

你从套接字中读到的是原始字节。我认为你需要先通过str.decode()将它们放入UTF-8中,如下所示:

data = response.read().decode('utf8')

请注意,内容并非始终以UTF-8编码。必须单独检查每个响应的Content-Type HTTP标头。

关于您的浏览器问题:我怀疑您忘记将适当的HTTP标头发送到客户端。或者,实际上,任何类型的标题部分。