You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 5 HttpClient发送XML Post请求时出现HTTP解析失败求助

解决「Http failure during parsing」错误的方案

我一眼就揪出了问题的核心——你把**响应类型(responseType)**错误地放到HTTP请求头里了!在Angular的HttpClient中,responseType是请求配置的独立选项,根本不属于Header字段,这就是导致解析失败的直接原因。

错误原因拆解

Angular的HttpClient默认会把响应当作JSON解析,当你期望返回XML文本时,必须明确告知它不要自动解析JSON,而是以纯文本形式处理。但你把Response-Type塞进Header的操作完全不生效,HttpClient依然会强行把XML响应按JSON规则解析,自然就抛出了解析失败的错误。

修正后的完整代码

把responseType从headers里移出来,放到httpOptions的顶层配置中:

// 修正后的请求配置
const httpOptions = {
  headers: new HttpHeaders({ 
    'Content-Type': 'text/xml', 
    'Accept': 'text/xml' 
  }),
  responseType: 'text' as 'json' // 关键:单独设置响应类型,as 'json'是为了绕过TypeScript的类型检查限制
};

login() {
  // 建议给XML加上声明,避免服务端解析出错
  const postedData = `<?xml version="1.0" encoding="UTF-8"?>
    <authenticationDetail>
      <userName>myusername</userName>
      <password>mypassword</password>
    </authenticationDetail>`;
  
  return this.http.post('http://localhost/login.ws', postedData, httpOptions)
    .subscribe(result => {
      console.log('登录响应文本:', result);
      // 如果需要解析XML,可以用浏览器原生的DOMParser
      const parser = new DOMParser();
      const xmlDoc = parser.parseFromString(result, "text/xml");
      // 这里可以操作xmlDoc提取需要的数据,比如获取用户名节点
      const userName = xmlDoc.getElementsByTagName('userName')[0].textContent;
    }, error => {
      console.error('请求出错:', error);
    });
}

额外注意点

  • 确认你的本地Web服务确实返回text/xml格式的响应,如果服务端实际返回JSON,那即使设置了正确的responseType也会出问题。
  • XML字符串的格式要严谨,标签闭合、嵌套正确,避免服务端先一步抛出XML解析错误。

内容的提问来源于stack exchange,提问作者user9597092

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:09:08