[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;
}
相關文章
- 取消Fetch API請求API
- 淺嘗flutter中的http請求FlutterHTTP
- php請求API介面方法PHPAPI
- POS請求API介面樣例API
- Flutter 網路請求框架封裝Flutter框架封裝
- Flutter Http請求開源庫-dioFlutterHTTP
- Flutter 網路請求 Dio 封裝Flutter封裝
- Fetch API HTTP請求實用指南APIHTTP
- elasticsearch常用請求介面Rest API示例ElasticsearchRESTAPI
- .NET Core使用 CancellationToken 取消API請求API
- 前端快取API請求資料前端快取API
- 對api請求封裝的探索和總結API封裝
- php curl 連線 EMQ http_api的請求PHPMQHTTPAPI
- API 請求中的 VND 和 PRS 的意思(Media Type)API
- flutter網路請求框架dio基本使用Flutter框架
- Flutter 網路請求的三種簡單實現Flutter
- Android阿里百川返傭功能整合Android阿里
- 請求OpenFeign的GET請求時,請求為何失敗?
- 簡單6步搞定Flutter網路請求Flutter
- Flutter http請求庫dio 1.0正式釋出FlutterHTTP
- Flutter開發系列教程之網路請求Flutter
- flutter dio網路請求封裝實現Flutter封裝
- Flutter中http請求抓包解決方案FlutterHTTP
- RxRetroHttp,為多套API請求適配而生HTTPAPI
- Vue — 請求模組、api模組封裝VueAPI封裝
- 有趣的請求引數/請求頭
- $request 請求方法 獲取 API 的當前使用者API
- 分享一個大模型在請求api介面上的巧用大模型API
- PHP與Curl採用的GET,POST,JSON方式請求APIPHPJSONAPI
- SpringMVC中如何傳送GET請求、POST請求、PUT請求、DELETE請求。SpringMVCdelete
- Flutter 高效自學筆記(三)——網路請求Flutter筆記
- .Net Core使用HttpClient請求Web API注意事項HTTPclientWebAPI
- GET和POST方式請求API介面資料返回API
- W3C付款請求API:Payment-Request API呼叫規範API
- Flutter | 定義一個通用的多功能網路請求 WidgetFlutter
- Flutter 熱門網路請求框架Dio的簡單封裝Flutter框架封裝
- Spring Boot中的 6 種API請求引數讀取方式Spring BootAPI
- 使用charles嗅探https請求,你的API並不安全HTTPAPI