Flutter API请求Token空格处理导致401认证失败求助
问题根源
你给_token加了嵌套引号,导致实际发送的请求头里Authorization值变成了"Token 25e94e9fc7d38d6a10bb9328fb07546881602467",而API要求的是不带引号的Token 25e94e9fc7d38d6a10bb9328fb07546881602467,这就是返回401未授权的直接原因。
另外你提到的空格转+问题,Authorization请求头不需要对空格做编码,HTTP协议允许头字段值包含空格,Flutter的http库会自动正确处理,之前的FormatException大概率是错误地将令牌放到URL查询参数中(而非请求头)导致的。
正确代码实现
直接移除令牌的嵌套引号,正常设置请求头即可:
// 不需要加任何引号,直接写Token + 令牌值 String _token = 'Token 25e94e9fc7d38d6a10bb9328fb07546881602467'; final Map<String, String> header = { 'Authorization': _token }; final response = await http.post(url, headers: header, body: json.encode(androidid)); final Map<String, dynamic> decodedResp = json.decode(response.body.toString()); print(decodedResp); print(response.statusCode); print(header);
额外说明
如果之前你是把令牌放到URL查询参数中(比如?token=Token xxx),那确实需要编码,但这种场景应该用Uri.https的queryParameters参数让系统自动编码,示例:
// 正确处理URL查询参数中的空格 var url = Uri.https('your-api-domain.com', '/endpoint', { 'token': _token, });
不过你的场景是用Authorization头认证,所以不需要这么做,直接按前面的代码设置请求头即可。
内容的提问来源于stack exchange,提问作者Ricardo Ramos
相关产品推荐
相关产品推荐

