diff --git a/src/org/wanxp/lang/locale/en.ts b/src/org/wanxp/lang/locale/en.ts index f228a13..7a22a33 100644 --- a/src/org/wanxp/lang/locale/en.ts +++ b/src/org/wanxp/lang/locale/en.ts @@ -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`, diff --git a/src/org/wanxp/utils/Logutil.ts b/src/org/wanxp/utils/Logutil.ts index f10bf3e..a5d076a 100644 --- a/src/org/wanxp/utils/Logutil.ts +++ b/src/org/wanxp/utils/Logutil.ts @@ -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 { - 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; } diff --git a/src/org/wanxp/utils/desktop/DesktopHttpUtil.ts b/src/org/wanxp/utils/desktop/DesktopHttpUtil.ts index bf96441..97a8f52 100644 --- a/src/org/wanxp/utils/desktop/DesktopHttpUtil.ts +++ b/src/org/wanxp/utils/desktop/DesktopHttpUtil.ts @@ -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,34 +24,49 @@ export default class DesktopHttpUtil { let options = { headers: headersInner } - settingsManager.debug(`Obsidian-Douban:从网络获取网页开始:\nurl:${url}\nheaders:${JSON.stringify(headers)}`); return new Promise((resolve, rejects) => { - https.get(url, { ...options }, function (response: any) { - 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 - }) + this.httpRequestGetInner(url, options, 0, resolve, rejects, settingsManager); + }) + } - 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) - }) + 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 (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请求 * @param url 请求地址 @@ -63,30 +79,43 @@ export default class DesktopHttpUtil { const options = { headers: headersInner } - settingsManager.debug(`Obsidian-Douban:从网络获取json开始:\nurl:${url}\nheaders:${JSON.stringify(headers)}`); return new Promise((resolve, rejects) => { - https.get(url, { ...options }, function (response: any) { - 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 - }) + this.httpRequestGetJsonInner(url, options, 0, resolve, rejects, settingsManager); + }) + } - 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) - }) + 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) { + 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) + 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 = { headers: headers } - if (settingsManager) { - settingsManager.debug(`Obsidian-Douban:从网络获取文件开始:\n${url}`); - } + 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 = [], 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 { + if (!html) { + return html; + } if (settingsManager) { settingsManager.debug(html); } - if (html && html.indexOf("禁止访问") != -1) { + if (html && html.toString().indexOf("禁止访问") != -1) { const loginModel = new DoubanHumanCheckModel(url); await loginModel.load(); return ''; diff --git a/src/org/wanxp/utils/mobile/MobileHttpUtil.ts b/src/org/wanxp/utils/mobile/MobileHttpUtil.ts index e6c976e..ba1e6a6 100644 --- a/src/org/wanxp/utils/mobile/MobileHttpUtil.ts +++ b/src/org/wanxp/utils/mobile/MobileHttpUtil.ts @@ -14,14 +14,14 @@ export default class MobileHttpUtil { public static httpRequestGet(url: string, headers: any, settingsManager?: SettingsManager): Promise { return this.httpRequestGetInner(url, headers, 0, settingsManager); } - private static httpRequestGetInner(url: string, headers: any, times:number, settingsManager?: SettingsManager): Promise { + private static async httpRequestGetInner(url: string, headers: any, times:number, settingsManager?: SettingsManager): Promise { 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 { + public static async humanCheck(html: any, url: string, settingsManager?: SettingsManager): Promise { + if (!html) { + return html; + } if (settingsManager) { settingsManager.debug(html); } - if (html && html.indexOf("禁止访问") != -1) { + if (html && html.toString().indexOf("禁止访问") != -1) { const loginModel = new DoubanHumanCheckModel(url); await loginModel.load(); return ''; @@ -68,4 +71,6 @@ export default class MobileHttpUtil { return html; } } + + }