mod: 缓解投稿视频接口风控

This commit is contained in:
orz12
2024-01-24 20:15:16 +08:00
parent 15fa430384
commit 8e6eba4139
3 changed files with 25 additions and 4 deletions

View File

@@ -1,3 +1,6 @@
import 'dart:convert';
import 'dart:math';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:hive/hive.dart'; import 'package:hive/hive.dart';
import '../common/constants.dart'; import '../common/constants.dart';
@@ -79,6 +82,8 @@ class MemberHttp {
String order = 'pubdate', String order = 'pubdate',
bool orderAvoided = true, bool orderAvoided = true,
}) async { }) async {
String dmImgStr = Utils.base64EncodeRandomString(16, 64);
String dmCoverImgStr = Utils.base64EncodeRandomString(32, 128);
Map params = await WbiSign().makSign({ Map params = await WbiSign().makSign({
'mid': mid, 'mid': mid,
'ps': ps, 'ps': ps,
@@ -88,12 +93,15 @@ class MemberHttp {
'order': order, 'order': order,
'platform': 'web', 'platform': 'web',
'web_location': 1550101, '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( var res = await Request().get(
Api.memberArchive, Api.memberArchive,
data: params, data: params,
extra: {'ua': 'pc'}, extra: {'ua': 'Mozilla/5.0'},
); );
if (res.data['code'] == 0) { if (res.data['code'] == 0) {
return { return {

View File

@@ -338,4 +338,17 @@ class Utils {
return md5String; 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<String>.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));
}
} }

View File

@@ -80,7 +80,7 @@ class WbiSign {
String getMixinKey(String orig) { String getMixinKey(String orig) {
String temp = ''; String temp = '';
for (int i = 0; i < mixinKeyEncTab.length; i++) { for (int i = 0; i < mixinKeyEncTab.length; i++) {
temp += orig.split('')[mixinKeyEncTab[i]]; temp += orig[mixinKeyEncTab[i]];
} }
return temp.substring(0, 32); return temp.substring(0, 32);
} }
@@ -104,7 +104,7 @@ class WbiSign {
final String queryStr = query.join('&'); final String queryStr = query.join('&');
final String wbiSign = final String wbiSign =
md5.convert(utf8.encode(queryStr + mixinKey)).toString(); // 计算 w_rid 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 可以从缓存中获取 // 获取最新的 img_key 和 sub_key 可以从缓存中获取