發現當遇到獲取的資料很長時, XML 的前後都會有一些非 XML 的資料顯示,令 XML Parser 等工具出錯……
使用如 Curl 等傳送 HTTP Request 的軟件並不會產生非 XML資料 ,而在瀏覽器則會
仔細留意發現
當傳回的 XML資料 短時,會有 Content-Length 的標頭
但當傳回的 XML資料 很長時,不會出現 Content-Length 的標頭
被取代成 Transfer-Encoding: chunked 稱為 分塊傳輸編碼(Chunked transfer encoding)
分塊傳輸編碼的結構
<hex-value> <part of body> <hex-value> <part of body> . . . 0
hex-value 為一個 0 或以上的 十六進制數值
每一個區塊由 hex-value 及 part of body 組成
hex-value 及 part of body 之間會以 CR (Carriage Return 或 \r) 及 LF (Line Feed 或 \n) 分隔
最後的區塊的 hex-value 會以 0 作結束
在下利用 PHP 將分割的區塊合併
$delimiter = "\r\n"; $rebuiltResponseBody = ''; $length = 1; while ($length > 0) { $fields = explode($delimiter, $originalResponseBody, 2); $length = hexdec($fields[0]); $rebuiltResponseBody .= substr($fields[1], 0, $length); $originalResponseBody = substr($fields[1], $length + strlen($delimiter)); }
沒有留言 :
張貼留言