【问题标题】:how to check if a response is in xml format instead of HTML?如何检查响应是否为 xml 格式而不是 HTML?
【发布时间】:2011-07-16 21:20:18
【问题描述】:


我正在使用一个总是向我发送 XML 响应的服务器。但有时当服务器缺少或某些内容时,它会通过向我发送一个 HTML 页面(它只是一个通知错误的 html 页面)来报告我,但我没想到,我的 XML 解析器崩溃了。
我使用 DefaultHttpClient() 并且我确实发送了 mHttpRequest.setHeader("Accept", "text/xml");
之类的标头 那么确保我得到 XML(或其他特定格式)响应的正确方法是什么?

【问题讨论】:

  • 您是否正确检查了响应的状态码?如果是导致 HTML 页面的错误,您不应该得到 200 OK。
  • 目前我没有,我猜你是对的。我会尝试解决返回的代码

标签: java android xml http


【解决方案1】:

正如 Kristian 建议的那样,看看它在发出 HTML 时是否提供不同的 Content-Type。如果失败,我会检查 <?xml... 行,与 doctype 或 HTML 页面上的任何内容相对应。

【讨论】:

  • 其实我也是这么想的
  • 不是每个 xml 文档都以 开头
【解决方案2】:

您可以检查响应中的内容类型标头吗?

类似的东西(如果我正确理解Android documentation):

"text/xml".equals(httpResponse.getEntity().getContentType().getValue());

【讨论】:

  • (一般而言)它可能不仅仅是“text/xml”——原子提要是非常明显(并且常见)的反例。寻找匹配“/xml”和/或“+xml”的 mime 可能会更好。见Internet media type。
【解决方案3】:

每个 XML 在开头都包含文档描述符 <?xml version="1.0" encoding="utf-8"?>。您可以在解析之前检查它。

但是,我认为您需要在解析器中进行一些错误处理和结果验证。网络不是一个安全的环境——您可以很容易地从网络中获得半损坏、格式错误甚至伪造的 XML。好的解析器应该检测到并报告相应的错误,而不仅仅是崩溃。

【讨论】:

  • 它可能不是 UTF-8...但是是的,有效的 XML 文档需要 XML 声明。 (话说回来,世界并不完美 :-)
  • 我明白了。它只是向我报告一个捕获的异常。它不会使整个应用程序崩溃。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多