Python urllib2 解码分块编码

2 投票
3 回答
2259 浏览
提问于 2025-04-17 00:28

我有一段代码用来打开和读取网址:

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

我认为这是从HTTP读取数据的最标准方法。不过,当响应使用了分块传输编码时,响应的开头会出现以下字符:

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

这是因为上面提到的分块编码,所以我的XML数据就变得损坏了。

所以我想知道怎么才能去掉与分块编码相关的所有元数据呢?

3 个回答

-1

你可以把问号和xml之前的所有内容都删掉。

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

1eb0\r\n2625\r\n 是重新组合后的数据包中,段的开始和结束位置(以十六进制表示)。

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]

找不到任何简单的解决办法。

撰写回答