[Flutter]请求阿里百川的API
时间:2022-06-09
本文章向大家介绍[Flutter]请求阿里百川的API,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
简单封装了一下,请求阿里百川的api。只是做了一个简单的get请求封装,要更加优雅可以自己再封装一下。
可以简单的学习一下Flutter的网络请求用法。
文件tb_api.dart代码如下:
import 'dart:convert';
import 'package:convert/convert.dart';
import 'package:crypto/crypto.dart';
import 'dart:async';
import 'package:http/http.dart' as http;
// 阿里百川
const AlibcAppKey = "";
const AlibcAppSecret = "";
const AlibcApiUrl = "http://gw.api.taobao.com/router/rest?";
const BCGoodsListURL = "taobao.tae.items.list";
const BCGoodsDetailURL = "taobao.item.detail.get";
// md5 加密
String generateMd5(String data) {
var content = new Utf8Encoder().convert(data);
var digest = md5.convert(content);
return hex.encode(digest.bytes);
}
// 公共请求参数
Map<String, String> commonParams(String method) {
const app_key = AlibcAppKey;
DateTime date = new DateTime.now();
// yyyy-MM-dd HH:mm:ss
String timestamp =
"${date.year.toString()}-${date.month.toString().padLeft(2,'0')}-${date.day.toString().padLeft(2,'0')} ${date.hour.toString().padLeft(2, '0')}:${date.minute.toString().padLeft(2, '0')}:${date.second.toString().padLeft(2, '0')}";
const format = "json";
const v = "2.0";
const sign_method = "md5";
const simplify = "true";
var params = {
"app_key": app_key,
"format": format,
"method": method,
"sign_method": sign_method,
"timestamp": timestamp,
"v": v
};
return params;
}
// 这是商品列表接口的参数
Map<String, String> goodsListParams() {
return {
"num_iids": '534014773552',
"fields": "cid,title,nick,price,num,pic_url"
};
}
// 最终的请求参数 通过公共参数和接口参数确定签名
Map<String, String> requestParameters(String method, Map<String, String> customParams) {
var params = commonParams(method);
var custom = customParams;
// print("接口参数: (custom)")
custom.forEach((k, v) {
params[k] = v;
});
// print("最终参数: (params)")
List<String> keys = params.keys.toList();
keys.sort();
// print("排序后的参数:(keys)")
String total = '';
keys.forEach((key) {
total += '${key}${params[key]}';
});
String sign =
generateMd5(AlibcAppSecret + total + AlibcAppSecret).toUpperCase();
params['sign'] = sign;
return params;
}
// 读取商品列表
getGoodsList() {
get(requestParameters(BCGoodsListURL, goodsListParams()));
}
// 读取商品详情
getGoodDetail(String itemId) {
var params = { "item_id" : itemId, "fields" : "item" };
get(requestParameters(BCGoodsDetailURL, params));
}
Future<Map> get(Map params) async {
final uri = new Uri.http('gw.api.taobao.com', '/router/rest', params);
// print('请求的url: ${uri}');
final headers = {
"Content-Type": "application/json",
};
final response = await http.get(uri, headers: headers);
var data = json.decode(response.body);
print('阿里返回的数据:${data}');
return data;
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 3分钟短文:用Laravel的方式管理服务器的文件们
- 漫画:什么是 “抽象工厂模式” ?
- 啥?Grafana 还能为日志添加告警?
- Docker映射详解,没问题了!
- 写了很久!详细理解Spring和IoC
- 一位摸金校尉决定转行前端
- CentOS7下搭建并体验HFish开源蜜罐系统
- 唐朝人更懂React
- 唐朝人更懂React
- 一起学习PHP的runkit扩展如何使用
- CentOS7下部署开源网络流量回溯分析系统Moloch
- spring源码(八)
- 通过源码理解rarp协议(基于linux1.2.13)
- 详解Im2Col+Pack+Sgemm策略更好的优化卷积运算
- Kubernetes 使用 ceph-csi 消费 RBD 作为持久化存储