fix mobile can not login

This commit is contained in:
wanxp 2024-03-17 21:58:23 +08:00
parent 6a0cf9dab1
commit 01276030ca
4 changed files with 121 additions and 66 deletions

@ -274,7 +274,7 @@ PS: This file could be delete if you want to.
'130106': `Can not use Douban this time, Please try Login In Douban Plugin. If not working please again after 12 hour or 24 hour. Or you can reset your connection `,
'130107': `Can not find array setting for {1} in {0} , Please add it in array settings`,
'130108': `Redirect times too much, please check your network or proxy`,
'140201': `[OB-Douban]: searching '{0}'...`,
'140202': `[OB-Douban]: result {0} rows`,

@ -29,10 +29,17 @@ export default class Logger {
}
public debug(e: any): any {
if (!e) {
return e;
}
if(e instanceof Error) {
console.error(e);
}else {
try {
console.log(`OB-Douban:${moment(new Date()).format('YYYY-MM-DD HH:mm:SS')}:${typeof e == 'string' ? e : JSON.stringify(e)}`);
}catch (e) {
console.log(`OB-Douban:${moment(new Date()).format('YYYY-MM-DD HH:mm:SS')}:` + e.toString());
}
}
return e;
}

@ -3,13 +3,14 @@ import {i18nHelper} from "../../lang/helper";
import {LoginUtil} from "../LoginUtil";
import DoubanHumanCheckModel from "../../douban/component/DoubanHumanCheckModel";
const {https} = require("follow-redirects");
var https:any = null;
export default class DesktopHttpUtil {
/**
* get请求
* @param url
@ -23,14 +24,29 @@ export default class DesktopHttpUtil {
let options = {
headers: headersInner
}
settingsManager.debug(`Obsidian-Douban:从网络获取网页开始:\nurl:${url}\nheaders:${JSON.stringify(headers)}`);
return new Promise((resolve, rejects) => {
this.httpRequestGetInner(url, options, 0, resolve, rejects, settingsManager);
})
}
private static httpRequestGetInner(url: string, options: any, times:number, resolve:any, rejects:any, settingsManager?: SettingsManager) {
settingsManager.debug(`Obsidian-Douban:从网络获取网页[开始]${times}:url:${url}\nheaders:${JSON.stringify(options)}`);
if (!https) {
https = require("follow-redirects").https;
}
https.get(url, { ...options }, function (response: any) {
let chunks: any = [],
size = 0;
if (response.status == 403) {
rejects(new Error(i18nHelper.getMessage('130106')));
if (settingsManager) {
settingsManager.debug(`Obsidian-Douban:从网络获取网页[完成]${times}:url:${url}\nresponse-header:${JSON.stringify(response.headers)}`);
settingsManager.debug(`Obsidian-Douban:从网络获取网页[完成]${times}:response-body:\n${response.text}`);
}
if (response.statusCode == 403) {
rejects(new Error(i18nHelper.getMessage('130106')));
return
}
response.on("data", function (chunk: any) {
chunks.push(chunk)
size += chunk.length
@ -48,9 +64,9 @@ export default class DesktopHttpUtil {
resolve(html)
})
})
})
}
/**
* get请求
* @param url
@ -63,13 +79,27 @@ export default class DesktopHttpUtil {
const options = {
headers: headersInner
}
settingsManager.debug(`Obsidian-Douban:从网络获取json开始:\nurl:${url}\nheaders:${JSON.stringify(headers)}`);
return new Promise((resolve, rejects) => {
this.httpRequestGetJsonInner(url, options, 0, resolve, rejects, settingsManager);
})
}
private static httpRequestGetJsonInner(url: string, options: any, times:number, resolve:any, rejects:any, settingsManager?: SettingsManager) {
settingsManager.debug(`Obsidian-Douban:从网络获取json开始:\nurl:${url}\nheaders:${JSON.stringify(options)}`);
if (!https) {
https = require("follow-redirects").https;
}
https.get(url, { ...options }, function (response: any) {
const chunks: any = [];
let size = 0;
if (response.status == 403) {
let chunks: any = [],
size = 0;
if (settingsManager) {
settingsManager.debug(`Obsidian-Douban:从网络获取JSON完成${times}:url:\n${url}`);
settingsManager.debug(`Obsidian-Douban:从网络获取JSON完成${times}:header:\n${JSON.stringify(response.headers)}`);
settingsManager.debug(`Obsidian-Douban:从网络获取JSON完成${times}:body:\n${response.text}`);
}
if (response.statusCode == 403) {
rejects(new Error(i18nHelper.getMessage('130106')));
return
}
response.on("data", function (chunk: any) {
chunks.push(chunk)
@ -80,7 +110,7 @@ export default class DesktopHttpUtil {
const data = Buffer.concat(chunks, size)
const html = data.toString()
if (settingsManager) {
settingsManager.debug(`Obsidian-Douban:从网络获取json完成:\nhtml:\n${html}`);
settingsManager.debug(`Obsidian-Douban:从网络获取JSON完成:\nhtml:\n${html}`);
}
if (LoginUtil.contentNeedLogin(html)) {
rejects(new Error(i18nHelper.getMessage('140304')));
@ -88,7 +118,6 @@ export default class DesktopHttpUtil {
resolve(html)
})
})
})
}
/**
@ -101,42 +130,56 @@ export default class DesktopHttpUtil {
let options = {
headers: headers
}
if (settingsManager) {
settingsManager.debug(`Obsidian-Douban:从网络获取文件开始:\n${url}`);
}
return new Promise((resolve, rejects) => {
this.httpRequestGetBufferInner(url, options, 0, resolve, rejects, settingsManager);
})
}
private static httpRequestGetBufferInner(url: string, options: any, times:number, resolve:any, rejects:any, settingsManager?: SettingsManager) {
if (settingsManager) {
settingsManager.debug(`Obsidian-Douban:从网络获取文件开始:\n${url}\nheaders:${JSON.stringify(options)}`);
if (!https) {
https = require("follow-redirects").https;
}
https.get(url, {...options}, function (response: any) {
let chunks: any = [],
size = 0;
if (response.status == 403) {
rejects(new Error(i18nHelper.getMessage('130106')));
if (settingsManager) {
settingsManager.debug(`Obsidian-Douban:从网络获取文件完成${times}:url:\n${url}`);
settingsManager.debug(`Obsidian-Douban:从网络获取文件完成${times}:header:\n${JSON.stringify(response.headers)}`);
}
if (response.statusCode == 403) {
rejects(new Error(i18nHelper.getMessage('130106')));
return
}
response.on("data", function (chunk: any) {
chunks.push(chunk)
size += chunk.length
})
response.on("end", function () {
let data = Buffer.concat(chunks, size)
const data = Buffer.concat(chunks, size)
if (settingsManager) {
settingsManager.debug(`Obsidian-Douban:从网络获取文件完成:\n${url}`);
settingsManager.debug(`Obsidian-Douban:从网络获取文件完成:`);
}
resolve(data)
})
})
})
}
}
public static async humanCheck(html: any, url: string, settingsManager?: SettingsManager): Promise<any> {
if (!html) {
return html;
}
if (settingsManager) {
settingsManager.debug(html);
}
if (html && html.indexOf("<title>禁止访问</title>") != -1) {
if (html && html.toString().indexOf("<title>禁止访问</title>") != -1) {
const loginModel = new DoubanHumanCheckModel(url);
await loginModel.load();
return '';

@ -14,14 +14,14 @@ export default class MobileHttpUtil {
public static httpRequestGet(url: string, headers: any, settingsManager?: SettingsManager): Promise<RequestUrlResponse> {
return this.httpRequestGetInner(url, headers, 0, settingsManager);
}
private static httpRequestGetInner(url: string, headers: any, times:number, settingsManager?: SettingsManager): Promise<RequestUrlResponse> {
private static async httpRequestGetInner(url: string, headers: any, times:number, settingsManager?: SettingsManager): Promise<RequestUrlResponse> {
let requestUrlParam: RequestUrlParam = {
url: url,
method: "GET",
headers: { ...headers},
throw: true
};
return requestUrl(requestUrlParam)
return await requestUrl(requestUrlParam)
// .then(res => res.text)
.then(response => {
if (response && response.text.indexOf('https://sec.douban.com/a') > 0) {
@ -52,15 +52,18 @@ export default class MobileHttpUtil {
} else {
throw log.error(i18nHelper.getMessage('130101').replace('{0}', e.toString()), e)
}
})
});
}
private static async humanCheck(html: any, url: string, settingsManager?: SettingsManager): Promise<any> {
public static async humanCheck(html: any, url: string, settingsManager?: SettingsManager): Promise<any> {
if (!html) {
return html;
}
if (settingsManager) {
settingsManager.debug(html);
}
if (html && html.indexOf("<title>禁止访问</title>") != -1) {
if (html && html.toString().indexOf("<title>禁止访问</title>") != -1) {
const loginModel = new DoubanHumanCheckModel(url);
await loginModel.load();
return '';
@ -68,4 +71,6 @@ export default class MobileHttpUtil {
return html;
}
}
}