2013-12-08 34 views
0

我想編程一個小的HTTP本地代理服務器在我的機器上運行並運行一些測試。 我的服務器目前運行完美,並提供請求罰款。搜索數據包中的數據。在python

但是,當我嘗試分析打包器時 - 出現問題。

我正在搜索包中的標籤「」,並在找到它時將消息打印到日誌中。 它工作的網站數量非常有限,而另一方面,如StackOverflow,例如,它沒有。

在我搜索接收到的數據中的單詞之前,是否需要進行某種解碼?如果是這樣 - 哪個解碼?如何重新編碼數據以供瀏覽器使用?

這裏是我的搜索代碼,並替換:

data = i.recv(8192) 
    if data: 
     if "<head>" in data: 
     print "Found Head Tag." 

上面的代碼是一個簡單的Python代碼來檢索從插座中的數據,將其保存到數據對象,並搜索想要的標籤。正如我所說,它只適用於少數網站,而不適用於其他網站。

回答

1

許多網絡服務器使用壓縮來降低帶寬使用率。 您需要檢查HTTP標頭以進行內容編碼並應用所需的操作(即gzip解壓縮)以獲取純文本。

+0

謝謝!但是,如何解壓縮一個數據塊,如上所述?當我嘗試使用zlib模塊時,出現錯誤,表示它不是有效的壓縮數據。如果你幫我解決問題,我會很高興。我是否需要緩衝整個響應者?它會大大減緩衝浪速度,不是嗎? –

+0

另外,如果我使用zlib而不是gzip,它會影響嗎? TVM! –

+0

是的,您需要緩衝整個HTTP響應,檢查Content-Encoding的值,提取響應的正文(無標題)並將其傳遞到「gzip」模塊(zlib使用的壓縮算法相同,但它們的輸出格式不兼容)。當然,響應可以使用不同的算法進行壓縮或編碼,但afaik實際上只使用gzip。您還應該考慮在壓縮後重新壓縮數據,或在將結果轉發到客戶端之前移除Content-Encoding標頭。 – smeso