2011-08-28 80 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