2017-05-04 77 views
0

这几天我正在写一个转发代理。代理连接的HTTP/s流

我遇到了三个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) 

如果我试图通过直接连接到重定向URL绕过第一个错误,出现的第二个问题。我从网站收到的数据(任何受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

*编辑:还是没能找到一个answer.I需要你的帮助:)

+2

如果不希望谷歌重定向到您的国家/地区,请使用https://www.google.com/ncr它将您转到https://www.google.com – Mani

+0

不幸的是,这对我没有多大帮助。我需要进一步帮助解决其他问题。 –

回答

1

你是从插座有原始字节读什么。我认为你需要把它们放到UTF-8首先通过str.decode()如下:

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

请注意,内容并不总是以UTF-8编码。人们必须单独检查每个响应的Content-Type HTTP标头。

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

+0

Aight,我已阅读更多关于此主题的内容,并解决了一些问题,谢谢!仅供参考,模块请求通过忽略Content-Type头来处理编码,因此不需要再编码:) –