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 `, '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`, '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}'...`, '140201': `[OB-Douban]: searching '{0}'...`,
'140202': `[OB-Douban]: result {0} rows`, '140202': `[OB-Douban]: result {0} rows`,

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

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

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