2017-05-04 25 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頭來處理編碼,因此不需要再編碼:) –