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

Flutter/Dart调用Infobip SMS批量API时POST请求未授权报错

解决Infobip SMS API调用的未授权问题

你遇到的UNAUTHORIZED错误主要是因为Header设置错误,同时请求体格式也存在问题,下面是具体的修正方案:

问题分析

  • Header设置完全错误:你把Authorization、Content-Type等所有Header都塞进了HttpHeaders.contentTypeHeader对应的字段里,这会导致服务器无法正确识别授权信息,直接返回未授权错误。
  • 请求体格式错误:手动拼接JSON字符串时格式混乱,用Map包裹字符串的写法完全不符合API要求。

修正方案

方案1:修复原生HttpClient代码

import 'dart:convert';
import 'dart:io';

data() async { 
  final client = HttpClient();
  final url = Uri.parse("https://....api.infobip.com/sms/2/text/advanced");
  
  final request = await client.postUrl(url);
  
  // 正确设置每个Header,单独调用set方法
  request.headers.set('Authorization', 'App YOUR_API_KEY'); // 替换为你的真实密钥
  request.headers.set(HttpHeaders.contentTypeHeader, 'application/json');
  request.headers.set(HttpHeaders.acceptHeader, 'application/json');
  
  // 用jsonEncode将Dart对象转为标准JSON字符串,避免手动拼接出错
  final body = jsonEncode({
    "messages": [
      {
        "from": "sms",
        "destinations": [{"to": "TARGET_PHONE_NUMBER"}], // 替换为目标号码(带国家区号)
        "text": "ABC"
      }
    ]
  });
  
  request.write(body);
  
  final response = await request.close();
  
  response.transform(utf8.decoder).listen((contents) {
    print(contents); 
  });
}

方案2:使用更简洁的http包(推荐)

原生HttpClient相对底层,使用http包可以大幅简化代码,降低出错概率:

  1. 先在pubspec.yaml中添加依赖:
dependencies:
  http: ^1.1.0
  1. 修正后的代码:
import 'package:http/http.dart' as http;
import 'dart:convert';

data() async {
  final url = Uri.parse("https://....api.infobip.com/sms/2/text/advanced");
  
  final headers = {
    'Authorization': 'App YOUR_API_KEY',
    'Content-Type': 'application/json',
    'Accept': 'application/json'
  };
  
  final body = jsonEncode({
    "messages": [
      {
        "from": "sms",
        "destinations": [{"to": "TARGET_PHONE_NUMBER"}],
        "text": "ABC"
      }
    ]
  });
  
  final response = await http.post(url, headers: headers, body: body);
  
  print(response.body);
}

关键注意事项

  • 确保YOUR_API_KEY替换为Infobip后台获取的真实授权密钥,格式为App XXXXXXXXXXXX(注意App后有空格)。
  • 目标号码to必须包含国家区号(例如中国大陆号码格式为+8613xxxxxxxxx)。
  • 确认你的Infobip账户状态正常,无欠费或权限限制。

内容的提问来源于stack exchange,提问作者Mr. Poopybutthole

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:42:06