From 8e6eba4139003eb417d48aef3613f46ba548c674 Mon Sep 17 00:00:00 2001 From: orz12 Date: Wed, 24 Jan 2024 20:15:16 +0800 Subject: [PATCH] =?UTF-8?q?mod:=20=E7=BC=93=E8=A7=A3=E6=8A=95=E7=A8=BF?= =?UTF-8?q?=E8=A7=86=E9=A2=91=E6=8E=A5=E5=8F=A3=E9=A3=8E=E6=8E=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/http/member.dart | 12 ++++++++++-- lib/utils/utils.dart | 13 +++++++++++++ lib/utils/wbi_sign.dart | 4 ++-- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/lib/http/member.dart b/lib/http/member.dart index bf84b6eb..0031ab6d 100644 --- a/lib/http/member.dart +++ b/lib/http/member.dart @@ -1,3 +1,6 @@ +import 'dart:convert'; +import 'dart:math'; + import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:hive/hive.dart'; import '../common/constants.dart'; @@ -79,6 +82,8 @@ class MemberHttp { String order = 'pubdate', bool orderAvoided = true, }) async { + String dmImgStr = Utils.base64EncodeRandomString(16, 64); + String dmCoverImgStr = Utils.base64EncodeRandomString(32, 128); Map params = await WbiSign().makSign({ 'mid': mid, 'ps': ps, @@ -88,12 +93,15 @@ class MemberHttp { 'order': order, 'platform': 'web', 'web_location': 1550101, - 'order_avoided': orderAvoided + 'order_avoided': orderAvoided, + 'dm_img_list': '[]', + 'dm_img_str': dmImgStr.substring(0, dmImgStr.length - 2), + 'dm_cover_img_str': dmCoverImgStr.substring(0, dmCoverImgStr.length - 2), }); var res = await Request().get( Api.memberArchive, data: params, - extra: {'ua': 'pc'}, + extra: {'ua': 'Mozilla/5.0'}, ); if (res.data['code'] == 0) { return { diff --git a/lib/utils/utils.dart b/lib/utils/utils.dart index bb4aaa93..27aae06b 100644 --- a/lib/utils/utils.dart +++ b/lib/utils/utils.dart @@ -338,4 +338,17 @@ class Utils { return md5String; } + + static String generateRandomString(int minLength, int maxLength) { + const String printable = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#\$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ '; + + var random = Random(); + int length = minLength + random.nextInt(maxLength - minLength + 1); + return List.generate(length, (index) => printable[random.nextInt(printable.length)]).join(); + } + + static String base64EncodeRandomString(int minLength, int maxLength) { + String randomString = generateRandomString(minLength, maxLength); + return base64.encode(utf8.encode(randomString)); + } } diff --git a/lib/utils/wbi_sign.dart b/lib/utils/wbi_sign.dart index 4f831f16..5da75da1 100644 --- a/lib/utils/wbi_sign.dart +++ b/lib/utils/wbi_sign.dart @@ -80,7 +80,7 @@ class WbiSign { String getMixinKey(String orig) { String temp = ''; for (int i = 0; i < mixinKeyEncTab.length; i++) { - temp += orig.split('')[mixinKeyEncTab[i]]; + temp += orig[mixinKeyEncTab[i]]; } return temp.substring(0, 32); } @@ -104,7 +104,7 @@ class WbiSign { final String queryStr = query.join('&'); final String wbiSign = md5.convert(utf8.encode(queryStr + mixinKey)).toString(); // 计算 w_rid - return {'wts': currTime.toString(), 'w_rid': wbiSign}; + return {'w_rid': wbiSign,'wts': currTime.toString()}; } // 获取最新的 img_key 和 sub_key 可以从缓存中获取