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
相关产品推荐
相关产品推荐

