Flutterwebhttp对状态不是200的响应抛出http.ClientException。该异常具有消息“XMLHttpRequest错误”。如何获取实际的响应正文和状态代码?网上的例子说使用response.statusCode,但在返回response之前抛出了exception。
try {
Uri uri = Uri.parse(apiEndpoint);
final response = await http.get(uri, headers: {"Authorization": "Bearer token"});
print(response.statusCode); **// THIS LINE IS NEVER EXECUTED IF RESP CODE IS NOT 200**
} catch(e) {
print(e); // Was it 403, 404 or 500???
}
2条答案
按热度按时间jogvjijk1#
你描述的那个案子
XMLHttpRequest错误
发生的原因是CORS,它抛出一个Exception而不是返回结果。
所以为了抓住这一点,你可以看看下面的示例代码。
如果你想在Flutter Web中禁用CORS,你可以通过以下命令运行你的项目来实现:
flutter run -d Chrome --web-browser-flag“--disable-web-security”
至于其余的情况,response.statusCode 应该足够了。
sh7euo9m2#
在Flutter中,
http
包在发生网络错误时确实会抛出ClientException
,但默认情况下,对于HTTP状态码200以外的情况,它不会抛出此异常。相反,它返回带有非200状态代码的响应沿着响应正文。您可以直接访问状态代码和响应正文,而不需要异常处理。下面是修改后的代码: