Streamlabs API捐赠接口Token认证失败(401)求助
Streamlabs API 401 未授权问题
尝试使用用户设置中的Access Token向https://streamlabs.com/api/v2.0/donations发送POST请求(仅自用未注册应用),已复制完整250位Token放入Bearer请求头,但持续收到401响应,提示Token无效导致认证失败。
Kotlin代码实现
val jsonPayload = JSONObject().apply { put("skip_alert", "no") put("name", notification.senderName) put("message", notification.message) put("amount", notification.amount) put("currency", "USD") } Log.d(TAG, "Request payload: $jsonPayload") val mediaType = "application/json".toMediaTypeOrNull() val body = jsonPayload.toString().toRequestBody(mediaType) val request = Request.Builder() .url("https://streamlabs.com/api/v2.0/donations") .post(body) .addHeader("accept", "application/json") .addHeader("content-type", "application/json") .addHeader("Authorization", "Bearer $apiToken") .build() client.newCall(request).execute().use { response -> val responseBody = response.body?.string() val responseCode = response.code }
Logcat输出
2025-03-02 00:53:55.370 23294-23294 AlertsApi com.example.upialerts D Starting test alert 2025-03-02 00:53:55.371 23294-23346 AlertsApi com.example.upialerts D Starting API call with token length: 250 2025-03-02 00:53:55.371 23294-23346 AlertsApi com.example.upialerts D First 4 chars of token: ****... 2025-03-02 00:53:55.371 23294-23346 AlertsApi com.example.upialerts D Request payload: {"skip_alert":"no","name":"Test Donation","message":"This is test donation","amount":1,"currency":"USD"} 2025-03-02 00:53:55.374 23294-23346 AlertsApi com.example.upialerts D Request URL: https://streamlabs.com/api/v2.0/donations 2025-03-02 00:53:55.374 23294-23346 AlertsApi com.example.upialerts D Request headers: accept: application/json content-type: application/json Authorization: 2025-03-02 00:53:55.802 23294-23346 AlertsApi com.example.upialerts D Response code: 401 2025-03-02 00:53:55.803 23294-23346 AlertsApi com.example.upialerts D Response headers: date: content-type: text/html; charset=UTF-8 cache-control: no-cache, private access-control-allow-origin:* access-control-allow-methods: GET, POST, PUT, DELETE, OPTIONS access-control-allow-headers: authorization, content-type cf-cache-status: DYNAMIC set-cookie: server: cloudflare cf-ray: 2025-03-02 00:53:55.803 23294-23346 AlertsApi com.example.upialerts D Response body: Unauthorized. 2025-03-02 00:53:55.803 23294-23346 AlertsApi com.example.upialerts E API call failed with code: 401 2025-03-02 00:53:55.803 23294-23346 AlertsApi com.example.upialerts E Error response: Unauthorized. 2025-03-02 00:53:55.803 23294-23346 AlertsApi com.example.upialerts E Authentication failed - Invalid token
问题分析与解决建议
从Logcat输出能直接看到,请求的Authorization头是空的——虽然日志显示token长度为250,但实际发送时并未携带有效内容,这是导致401未授权的核心原因。
具体修复方向
- 检查
apiToken变量有效性- 确认
apiToken在使用前已正确赋值,比如从用户设置读取时是否出现空值、字符串截断或编码错误。可在添加请求头前增加日志(脱敏打印),验证变量确实持有完整Token。
- 确认
- 修正请求头拼接逻辑
- 确保
"Bearer $apiToken"拼接无异常,比如Token是否包含换行、空格等非法字符,可通过trim()去除首尾空白后再拼接:.addHeader("Authorization", "Bearer ${apiToken.trim()}")
- 确保
- 验证Token权限范围
- 确认该Token拥有
donations.create权限,可在Streamlabs账户的API设置页查看权限配置是否符合要求。
- 确认该Token拥有
- 核对API端点正确性
- 确认
v2.0/donations端点适用于个人自用场景,可对照官方文档确认端点版本和使用规则。
- 确认
内容的提问来源于stack exchange,提问作者mu0by4pi
相关产品推荐
相关产品推荐

