2011-08-28 72 views
2

我有以下代碼打開和讀取網址:Python的urllib2的解碼塊編碼

html_data = urllib2.urlopen(req).read() 

,我相信這是讀取HTTP數據的最標準的方式。 然而,當響應具有chunked tranfer-encoding,響應開始與以下字符:

1eb0\r\n2625\r\n 
<?xml version="1.0" encoding="UTF-8"?> 
... 

發生這種情況,由於上述分塊編碼所提到的,因此我的XML數據已損壞。

所以我想知道如何擺脫所有與分塊編碼有關的元數據?

+0

當您嘗試加載在Web瀏覽器的源數據會發生什麼\ r \ n是段開始/停止(十六進制)的位置?你有1eb0還是2625?那些(和其他)數字是否一致? – chaimp

+0

不,瀏覽器正確處理它 – dragoon

回答

1

我結束了自定義XML剝離,是這樣的:

xml_start = html_data.find('<?xml') 
    xml_end = html_data.rfind('</mytag>') 
    if xml_start !=0: 
     log_user_action(req.get_host() ,'chunked data', html_data, {}) 
     html_data = html_data[xml_start:] 
    if xml_end != len(html_data)-len('</mytag>')-1: 
     html_data = html_data[:xml_end+1] 

無法找到任何簡單的解決辦法。

-1

可以之前刪除一切XML

html_data = html_data[html_data.find('<?xml'):] 
+0

不幸的是,我不能。分塊編碼還在有效載荷之後添加一些元數據。我只是舉例說明了我的轉儲的開始。 – dragoon

0

1eb0 \ r \ n2625在重組的有效載荷

+0

這不會提供問題的答案。要批評或要求作者澄清,在他們的帖子下留下評論 - 你可以隨時評論你自己的帖子,一旦你有足夠的[聲譽](http://stackoverflow.com/faq#reputation),你將能夠[評論任何帖子](http://stackoverflow.com/privileges/comment)。 –

+0

@StevenRumbalski我的評論是特定於關於刪除元數據的評論。簡單地忽略這些值是不明智的,並假設你在有效載荷中得到的是預期的數據。應該使用元數據來驗證您所擁有的有效載荷,是否與您打算運行的數據塊相匹配。換句話說,不要只是天真地嘗試查找xml並忽略分塊信息,否則可能會由於事情失常或丟失而導致數據格式不正確。使用元數據來確保正確的塊重組。 – FirefighterBlu3