From 6b047b595c7d0464e38550401341e54d7257d161 Mon Sep 17 00:00:00 2001 From: wanxp <977741432@qq.com> Date: Fri, 15 Mar 2024 20:11:27 +0800 Subject: [PATCH] custom lib --- package-lock.json | 34 +---- src/org/wanxp/utils/HttpUtil.ts | 226 ++++++++++++++++++-------------- 2 files changed, 126 insertions(+), 134 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3f598be..3153cd3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19 +1,18 @@ { "name": "obsidian-douban-plugin", - "version": "1.9.6", + "version": "2.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "obsidian-douban-plugin", - "version": "1.9.6", + "version": "2.0.0", "license": "MIT", "dependencies": { "@notable/html2markdown": "^1.1.3", "@popperjs/core": "^2.11.6", "cheerio": "^1.0.0-rc.11", "follow-redirects": "^1.15.3", - "iconv-lite": "^0.6.3", "schema-dts": "^1.1.0" }, "devDependencies": { @@ -3291,17 +3290,6 @@ "node": ">=10.17.0" } }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -4884,11 +4872,6 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, "node_modules/schema-dts": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/schema-dts/-/schema-dts-1.1.0.tgz", @@ -7861,14 +7844,6 @@ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, "ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -9045,11 +9020,6 @@ "queue-microtask": "^1.2.2" } }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, "schema-dts": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/schema-dts/-/schema-dts-1.1.0.tgz", diff --git a/src/org/wanxp/utils/HttpUtil.ts b/src/org/wanxp/utils/HttpUtil.ts index 1473329..5faf26c 100644 --- a/src/org/wanxp/utils/HttpUtil.ts +++ b/src/org/wanxp/utils/HttpUtil.ts @@ -1,11 +1,10 @@ import { log } from "./Logutil"; import { i18nHelper } from "../lang/helper"; import SettingsManager from "../douban/setting/SettingsManager"; -import { request, RequestUrlParam } from "obsidian"; +import {request, requestUrl, RequestUrlParam} from "obsidian"; import DoubanHumanCheckModel from "../douban/component/DoubanHumanCheckModel"; -import {LoginUtil} from "./LoginUtil"; -const {https} = require("follow-redirects"); +// const {https} = require("follow-redirects"); export default class HttpUtil { @@ -25,31 +24,33 @@ export default class HttpUtil { 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 - }) + // 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 + // }) + // + // 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) + // }) + // }) + // }) + return this.httpRequestGet1Inner(url, headers, 0, 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) - }) - }) - }) } /** @@ -65,31 +66,33 @@ export default class HttpUtil { 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 - }) + // 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 + // }) + // + // 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) + // }) + // }) + // }) + return this.httpRequestGet1Inner(url, headers, 0, 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) - }) - }) - }) } /** @@ -102,30 +105,34 @@ export default class HttpUtil { let options = { headers: headers } - if (settingsManager) { - settingsManager.debug(`Obsidian-Douban:从网络获取文件开始:\n${url}`); - } - 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 - }) - - response.on("end", function () { - let data = Buffer.concat(chunks, size) - if (settingsManager) { - settingsManager.debug(`Obsidian-Douban:从网络获取文件完成:\n${url}`); - } - resolve(data) - }) - }) - }) + // if (settingsManager) { + // settingsManager.debug(`Obsidian-Douban:从网络获取文件开始:\n${url}`); + // } + // 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 + // }) + // + // response.on("end", function () { + // let data = Buffer.concat(chunks, size) + // if (settingsManager) { + // settingsManager.debug(`Obsidian-Douban:从网络获取文件完成:\n${url}`); + // } + // resolve(data) + // }) + // }) + // }) + // return this.httpRequestGet1Inner(url, headers, 0, settingsManager); + return this.httpRequestGet1Inner(url, headers, 0, settingsManager).then(s => { + return new TextEncoder().encode(s); + }); } @@ -138,33 +145,48 @@ export default class HttpUtil { * @param headers 请求参数 * @param settingsManager 设置管理器 */ - public static httpRequestGet1(url: string, headers: any, settingsManager?: SettingsManager): Promise { - let requestUrlParam: RequestUrlParam = { - url: url, - method: "GET", - headers: headers, - throw: true - }; - return request(requestUrlParam) - // .then(res => res.text) - .then(data => { - if (data && data.indexOf('https://sec.douban.com/a') > 0) { - log.notice(i18nHelper.getMessage('130105')) - if (settingsManager) { - settingsManager.debug(`Obsidian-Douban:获取异常网页如下:\n${data}`); - } - } - settingsManager.debug(`Obsidian-Douban:获取网页如下:\n${data}`); - return data; - }) - .then(s => this.humanCheck(s, url, settingsManager)) - .catch(e => { - if (e.toString().indexOf('403') > 0) { - throw log.error(i18nHelper.getMessage('130105'), e) - } else { - throw log.error(i18nHelper.getMessage('130101').replace('{0}', e.toString()), e) - } - }) + public static httpRequestGet1(url: string, headers: any, settingsManager?: SettingsManager): Promise { + return this.httpRequestGet1Inner(url, headers, 0, settingsManager); + } + private static httpRequestGet1Inner(url: string, headers: any, times:number, settingsManager?: SettingsManager): Promise { + let requestUrlParam: RequestUrlParam = { + url: url, + method: "GET", + headers: headers, + throw: true + }; + return requestUrl(requestUrlParam) + // .then(res => res.text) + .then(response => { + if (response && response.text.indexOf('https://sec.douban.com/a') > 0) { + log.notice(i18nHelper.getMessage('130105')) + if (settingsManager) { + settingsManager.debug(`Obsidian-Douban:获取异常网页如下:\n${response}`); + } + } + if (response.status == 301 || response.status == 302 || response.status == 303 || response.status == 307) { + if (times > 2) { + throw new Error('重定向次数过多'); + } + let location = response.headers['location']; + settingsManager.debug(`Obsidian-Douban:获取重定向地址如下:\n${location}`); + if (location.indexOf('http') != 0) { + return this.httpRequestGet1Inner(location, headers, times + 1, settingsManager); + } else { + throw new Error('重定地址错误'); + } + } + settingsManager.debug(`Obsidian-Douban:获取网页如下:\n${response}`); + return response.text; + }) + .then(s => this.humanCheck(s, url, settingsManager)) + .catch(e => { + if (e.toString().indexOf('403') > 0) { + throw log.error(i18nHelper.getMessage('130105'), e) + } else { + throw log.error(i18nHelper.getMessage('130101').replace('{0}', e.toString()), e) + } + }) }