问题描述
我想获得一个网络 API。
使用 HMAC-SHA1 编码的 Web 请求。就像下面:
以下是我的代码:
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 (将#修改为@)