You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Web调用Discord API返回401错误,疑User-Agent配置有误

解决Flutter Web调用Discord API /users/@me返回401未授权的问题

核心问题分析

你遇到的401错误大概率是因为User-Agent头不符合Discord API的要求,同时GET请求中多余的Content-Type头也可能干扰验证逻辑。Discord API明确要求请求的User-Agent不能是通用的语言/框架默认值,需要包含你的应用标识信息。

解决方案

1. 修正User-Agent格式

将User-Agent改为包含应用名称、版本的自定义标识,示例:

'User-Agent': 'YourFlutterApp/1.0.0'

如果有应用官网,也可以补充完整信息:

'User-Agent': 'YourFlutterApp/1.0.0 (+https://yourapp.com)'

Discord官方要求User-Agent要能明确识别你的应用,避免使用Dart/xxx这类通用标识。

2. 移除不必要的Content-Type头

GET请求没有请求体,不需要设置Content-Type: application/x-www-form-urlencoded,这个冗余头会被Discord视为无效请求的潜在标识,直接移除即可。

3. 确认令牌类型正确性

确保discAccessTokenType的值是Bearer(Discord OAuth2返回的令牌类型默认是这个),检查变量是否存在拼写错误或大小写问题。

修改后的代码

Future<void> getUser() async {
  final url = 'https://discord.com/api/v10/users/@me';
  final client = http.Client();

  try {
    final uriResponse = await client.get(Uri.parse(url), headers: {
      'User-Agent': 'YourFlutterApp/1.0.0', // 替换为你的应用标识
      'Authorization': '$discAccessTokenType $discAccessToken',
    });
    
    if (uriResponse.statusCode == 200) {
      getUserResponse = json.decode(uriResponse.body);
    } else {
      // 添加错误日志方便排查
      print('请求失败: ${uriResponse.statusCode} - ${uriResponse.body}');
    }
  } catch (e) {
    print('请求异常: $e');
  } finally {
    client.close(); // 关闭客户端避免资源泄漏
  }
}

额外检查项

  • 确认discAccessToken没有过期,Discord的access_token有效期通常为1小时,过期需用refresh_token刷新。
  • 检查Flutter Web环境下是否存在CORS拦截,若浏览器控制台有CORS错误,需在Discord开发者后台配置正确的重定向URL和CORS origins。

内容的提问来源于stack exchange,提问作者user18797867

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 06:27:13