使用HTTP Apache客户端将XML响应作为字符串读取时,我收到以下异常:
org.apache.http.MalformedChunkCodingException: CRLF expected at end of chunk
这是在我的代码中读取从REST API检索的XML:
{WebTarget target = this.client.target(new URI(loginUrl));
Response response = target.request(MediaType.APPLICATION_XML).post(Entity.entity(xmlString, MediaType.APPLICATION_XML));
logger.info("Response -> "+response);
String responseXML = response.readEntity(String.class);}
此响应由服务器随机触发。
HTTP Request
POST http://{serverName}:{port}/auth/2.8/signin
HTTP Response
An Apache HTTP Response Pojo Object
答案 0 :(得分:1)
请帮助识别并解决此问题。
您的问题中没有足够的信息来做到这一点。
客户端库抱怨响应不正确;即它违反了HTTP规范。它所讨论的规范的特定部分是Section 4.1 - Chunked Transfer Coding
一种可能的解释是您尝试使用的Web服务器实现不正确。如果您使用的服务器被某些误导的人试图使用套接字从头开始实施,则可能会发生这种情况……而不是使用现有Web容器或http协议库的明智方法。
第二种可能的解释是正在干扰正在运行的TCP / HTTP数据。例如,当通过MS代理与Web服务器通信时,这显然曾经在某些较旧版本的Android Emulator中发生;参见https://issuetracker.google.com/issues/36919648
如何对此进行调查?好吧,我建议以下几点:
阅读HTTP规范的相关部分,以便您了解要查找的内容。
使用诸如Wireshark之类的数据包监视工具来捕获这些故障之一的原始流量。
仔细检查捕获的数据包以发现丢失的CRLF
计算出数据包的来源,然后返回源以查看产生问题的位置。
此外,请仔细阅读其他一些“ CRLF预期在块末”与您的情况相关的问题。