使用Azure Blob服务API时XML响应格式出错

时间:2017-02-03 05:58:37

标签: xml azure azure-storage azure-storage-blobs

当我发送GET请求时:

GET











x-ms-date:Fri, 03 Feb 2017 05:50:10 GMT
x-ms-version:2016-05-31
/xyz/mycontainer
comp:list
delimeter:/
maxresults:1000
prefix:image
restyle:container

请求成功,代码200和消息" OK"。但是,我在解析响应时遇到错误。

  

错误:解析XML时出错:prolog中不允许使用内容。

但是当我删除前3个字节时:

while(i!=3){
                System.out.println(in.read());
                i++;
            }

它开始正确解析XML。

当我在ASCII表中查找这些代码时。我在下面找到了字符:

  

'╗┐

为什么Azure Blob Service Rest API会在响应的XML开头添加这些字符?

我的朋友说这可能是因为这个特殊的响应头包括Transfer-Encoding:chunked in header。 但是,我不明白他在说什么,他自己也不确定?

  

代码:简单的XML解析代码。

     

回应:起始位:

 <?xml version="1.0" encoding="utf-8"?><EnumerationResults
    > ServiceEndpoint="http://xyz.blob.core.windows.net/"
    > ContainerName="mycontainer"><Prefix>xyz</Prefix><MaxResults>1000</MaxResults><Blobs><Blob><Name>xyz</Name>

1 个答案:

答案 0 :(得分:0)

我得到了答案。基本上,Azure使用不同的传输编码进行不同的响应传输。通常对于大文件,它使用分块传输编码。

所以,如果我想传输数据“Arjun_rocks&#34;使用分块传输编码。它将是:

4\r\n
Arju\r\n
5\r\n
_rock\r\n
0\r\n
\r\n
  

因此,前3个字符是传输的数据长度然后   回车然后换行符。

我发布的ASCII字符被错误中断,因为Azure在发送数据之前也会压缩字符串。