Python urllib2解码分块编码

时间:2011-08-28 13:59:20

标签: python urllib2 chunked-encoding httplib

我有以下代码来打开和阅读网址:

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

我相信这是从HTTP读取数据的最标准方法。 但是,当响应为chunked tranfer-encoding时,响应将以以下字符开头:

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

这是由于上面提到的分块编码而导致我的XML数据损坏。

所以我想知道如何摆脱与分块编码相关的所有元数据?

3 个答案:

答案 0 :(得分: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 :(得分:0)

1eb0 \ r \ n \ n2625 \ r \ n是重新组装的有效负载中的段开始/停止位置(十六进制)

答案 2 :(得分:-1)

您可以删除之前的所有内容吗?xml

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