2

URLを開いて読み取るための次のコードがあります。

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

これがHTTPからデータを読み取るための最も標準的な方法だと思います。ただし、応答にチャンク転送エンコーディングがある場合、応答は次の文字で始まります。

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

これは、上記のチャンクエンコーディングが原因で発生するため、XMLデータが破損します。

では、チャンクエンコーディングに関連するすべてのメタデータをどのように取り除くことができるのでしょうか?

4

3 に答える 3

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]

簡単な解決策が見つかりません。

于 2011-09-04T12:15:56.263 に答える
0

1eb0 \ r \ n2625 \ r \ nは、再構築されたペイロードのセグメントの開始/停止位置(16進数)です。

于 2012-09-19T23:44:56.523 に答える
-1

?xmlの前にすべてを削除できます

html_data = html_data[html_data.find('<?xml'):]
于 2011-08-28T14:08:04.317 に答える