Python urllib2 解码分块编码
我有一段代码用来打开和读取网址:
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]
找不到任何简单的解决办法。