Flutter中http:^0.13.5的Get请求返回409未认证,Insomnia正常,语法是否有误?
问题排查:Flutter http请求返回409未认证,Insomnia测试正常
你的代码语法本身没有问题,能够正常发起GET请求。出现{"status":409,"message":"Unauthenticated"}的错误,核心原因是Flutter端发送的请求与Insomnia的请求存在未被注意到的差异,以下是具体排查方向:
验证Authorization头的完整性:
虽然代码中Authorization头的格式看似正确,但可以在请求前打印实际发送的头信息,确认Bearer与token之间是否只有一个空格,没有多余字符:final headers = { 'Authorization': 'Bearer 40fe071962846075452a4f6123ae71697463cad20f51e237e2035b41af0513d8', }; print(headers['Authorization']); // 打印确认格式 final response = await http.get( Uri.parse('http://sys-dev.searchandstay.com/api/admin/house_rules'), headers: headers, );确认URL的一致性:
检查Uri.parse生成的URL是否与Insomnia中的完全一致(包括路径、参数、大小写等),可以打印生成的Uri对象:final url = Uri.parse('http://sys-dev.searchandstay.com/api/admin/house_rules'); print(url.toString());避免因Uri自动转义或拼写差异导致后端路由匹配失败。
排查Cookie或隐式头差异:
Insomnia会自动保存并携带之前请求的Cookie(比如Session ID),而Flutter的http请求默认是无状态的,不会保留Cookie。如果后端同时依赖Cookie和Authorization头进行认证,就会出现这种差异。可以在Insomnia中禁用Cookie后重新测试,看是否也返回409,以此验证。模拟Insomnia的请求头:
尝试添加Insomnia中的User-Agent等额外头信息,消除请求标识差异:headers: { 'Authorization': 'Bearer 40fe071962846075452a4f6123ae71697463cad20f51e237e2035b41af0513d8', 'User-Agent': 'Insomnia/2023.5.8', // 替换为你使用的Insomnia版本对应的User-Agent 'Accept': '*/*', },抓包对比请求细节:
使用Charles、Fiddler等工具分别抓取Flutter App和Insomnia的请求,对比两者的请求头、请求路径、甚至请求方法是否完全一致,这是定位差异最直接的方式。
内容的提问来源于stack exchange,提问作者Eric Melo
相关产品推荐
相关产品推荐

