2017-02-03 53 views
0

当我发送一个GET请求的XML响应格式:错误与Azure的blob服务API

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”。但是,解析响应时出现错误。

Error: Error while parsing XML: Content is not allowed in prolog.

但是,当我第一次取出3个字节:

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

它开始正确地解析XML。

当我在ASCII码表中查找这些代码时。我发现以下特点:

'╗┐

为什么Azure的Blob服务REST API在XML的开始响应添加这些字符?

我的朋友说这可能是因为这个特殊的响应头包括传输编码:在头中分块。 但是,我不明白他在说什么,他自己也不确定?

Code: Simple XML Parsing code.

Response: Starting bits:

<?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> 
+0

您可以分享您得到的XML响应,以及解析该XML的代码吗? –

+0

看起来您并没有阅读完整的响应XML应该以''。 –

+0

@GauravMantri Gaurav我还没有发布完整的回复。但是,谢谢我得到了答案,这很棘手,必须转到调试器模式来阅读完整响应头。 –

回答

0

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

所以,如果我想使用块传输编码数据传输“Arjun_rocks”这将是:

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

So, first 3 characters are length of data transferred and then carriage return and then newline character.

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

+0

请将此回复标记为答案,以便解决遇到类似问题的其他社区成员。 –

相关问题