Python urllib2 解码分块编码

发布于 2024-12-01 22:44:59 字数 417 浏览 1 评论 0原文

我有以下代码来打开和读取 URL:

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

我相信这是从 HTTP 读取数据的最标准方法。 但是,当响应具有分块传输编码时,响应以以下内容开头字符:

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

这是由于上述分块编码而发生的,因此我的 XML 数据被损坏。

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

I have the following code to open and read URLs:

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

and I believe this is the most standard way to read data from HTTP.
However, when the response have chunked tranfer-encoding, the response starts with the following characters:

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

This happens due to the mentioned above chunked encoding and thus my XML data becomes corrupted.

So I wonder how I can get rid of all meta-data related to the chunked encoding?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

沒落の蓅哖 2024-12-08 22:44:59

我最终进行了自定义 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]

找不到任何简单的解决方案。

I ended up with custom xml stripping, like this:

    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]

Can't find any simple solution.

開玄 2024-12-08 22:44:59

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

1eb0\r\n2625\r\n is the segment start/stop positions (in hex) in the reassembled payload

没有伤那来痛 2024-12-08 22:44:59

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

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

You can remove everything before ?xml

html_data = html_data[html_data.find('<?xml'):]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文