在文章 https://andaily.com/blog/?p=97 中提到了OAUTH验证失败或错误时的处理办法, 但该方式是不完美的.
通过剖析代码发现,为什么在浏览器中会返回XML格式的数据, 而在使用类似HttpClient的请求时返回的数据格式为JSON,
其实所有的根源都在于请求header中的Accept的值所决定的,如果Accept不支持application/json, 那服务端肯定不会返回JSON格式的数据,
通过浏览器的开发者工具很容易追踪,如下图:
从图中可以看出我们在请求时header中Accept的值为:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8; 服务器响应401
没有json格式的 media type, 但有xml的, 所以返回的数据格式不会是JSON的在浏览器请求时, 同时请注意 response header中的WWW-Authenticate.
相同的请求,如果我们换一种方式, 如Postman, 其结果返回的却是JSON格式的.如下图:
这也是因为请求时的header中Accept导致的, 看下图:
Postman在请求时的Header中设置了Content-Type: application/json; 同时也注意WWW-Authenticate.
综上分析, 你应该知道如何在请求时设定响应时的数据格式了吧. 方法如下:
1. 如果能指定Header中的Accept或Content-Type, 则指定为具体的数据类型或 media type (一般用在非浏览器环境)
2.不管返回的数据体(response body)是XML还是JSON, 通过响应的header来处理, 如果响应码不是200, 则获取Header中WWW-Authenticate的值.
通过解析WWW-Authenticate的值来获取错误信息 (适用几乎所有环境)