Flutter/Dart HMAC-SHA1 编码,然后使用 header 请求 web api

问题描述

我想获得一个网络 API。 使用 HMAC-SHA1 编码的 Web 请求。就像下面:

enter image description here

以下是我的代码

getData(){
  String APPID = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF";
  String APPKey = "XXXXXXXXXXXXXXXXXXXXXXXXXXX";

  final String time = readTimestamp(DateTime.Now().millisecondsSinceEpoch);
  final signDate = "x-date: $time";
  var key = utf8.encode(APPKey);
  var hmacSha1 = new Hmac(sha1,key);
  var hmac = hmacSha1.convert(utf8.encode(signDate));
  var base64HmacString = Base64Encoder().convert(hmac.bytes);

  var bytes = utf8.encode(""""hmac username=$APPID,algorithm="hmac-sha1",headers="x-date",signature=$base64HmacString""");
  var digest = hmacSha1.convert(bytes);
  visitAPI(time,'$digest');
}

String readTimestamp(int timestamp){
  var format = new DateFormat("EEE,dd MMM yyyy HH:mm:ss");
  var time = format.format(DateTime.Now().toUtc()) + " GMT";

  print(time.toString());
  return time.toString();
}

Future<void> visitAPI(String xdate,String authorization) async {
  final url = "https://ptx.transportdata.tw/MOTC/v2/Bus/RealTimeByFrequency/Streaming/City/Hsinchu?\$top=30&\$format=JSON";
  final response = await http.get(url,headers: {"x-date": xdate,"Authorization": authorization});
  final jsonSt = json.decode(response.body);
  print(response.body);
}

我尝试了很多次,但仍然收到消息:“无法验证 HMAC 签名”。我的代码有问题吗?请帮我。 谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)