fix(pugongying): 使用 GM_xmlhttpRequest 解决跨域请求 CORS 问题
对代理 API 请求改用 GM_xmlhttpRequest 绕过浏览器 CORS 限制, 蒲公英官方 API 仍使用原生 fetch(同源无需跨域)。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
1c21be5e77
commit
465e1f7746
@ -4,7 +4,8 @@
|
|||||||
// @version 0.1.1
|
// @version 0.1.1
|
||||||
// @description 输入达人主页链接或达人 ID,勾选字段后导出 Excel
|
// @description 输入达人主页链接或达人 ID,勾选字段后导出 Excel
|
||||||
// @match https://pgy.xiaohongshu.com/*
|
// @match https://pgy.xiaohongshu.com/*
|
||||||
// @grant none
|
// @grant GM_xmlhttpRequest
|
||||||
|
// @connect api.internal.intelligrow.cn
|
||||||
// @require https://cdn.jsdelivr.net/npm/xlsx@0.18.5/dist/xlsx.full.min.js
|
// @require https://cdn.jsdelivr.net/npm/xlsx@0.18.5/dist/xlsx.full.min.js
|
||||||
// ==/UserScript==
|
// ==/UserScript==
|
||||||
|
|
||||||
@ -14,6 +15,27 @@
|
|||||||
module.exports = api;
|
module.exports = api;
|
||||||
}
|
}
|
||||||
})(typeof globalThis !== "undefined" ? globalThis : this, function factory(root) {
|
})(typeof globalThis !== "undefined" ? globalThis : this, function factory(root) {
|
||||||
|
function gmFetch(url, options) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const headers = options && options.headers ? options.headers : {};
|
||||||
|
GM_xmlhttpRequest({
|
||||||
|
method: (options && options.method) || "GET",
|
||||||
|
url,
|
||||||
|
headers,
|
||||||
|
onload(res) {
|
||||||
|
resolve({
|
||||||
|
ok: res.status >= 200 && res.status < 300,
|
||||||
|
status: res.status,
|
||||||
|
json: () => Promise.resolve(JSON.parse(res.responseText)),
|
||||||
|
});
|
||||||
|
},
|
||||||
|
onerror(err) {
|
||||||
|
reject(new Error("GM_xmlhttpRequest 网络错误: " + (err.statusText || url)));
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
const API_BASE =
|
const API_BASE =
|
||||||
"https://pgy.xiaohongshu.com/api/solar/cooperator/user/blogger/";
|
"https://pgy.xiaohongshu.com/api/solar/cooperator/user/blogger/";
|
||||||
const PROXY_API_BASE = "https://api.internal.intelligrow.cn";
|
const PROXY_API_BASE = "https://api.internal.intelligrow.cn";
|
||||||
@ -395,7 +417,9 @@
|
|||||||
async function fetchSupplementalPayload(userId, fetchImpl, config) {
|
async function fetchSupplementalPayload(userId, fetchImpl, config) {
|
||||||
const extra =
|
const extra =
|
||||||
typeof config.extraHeaders === "function" ? config.extraHeaders() : {};
|
typeof config.extraHeaders === "function" ? config.extraHeaders() : {};
|
||||||
const response = await fetchImpl(config.buildUrl(userId), {
|
const hasExtra = Object.keys(extra).length > 0;
|
||||||
|
const fetcher = hasExtra && typeof GM_xmlhttpRequest === "function" ? gmFetch : fetchImpl;
|
||||||
|
const response = await fetcher(config.buildUrl(userId), {
|
||||||
method: "GET",
|
method: "GET",
|
||||||
credentials: "include",
|
credentials: "include",
|
||||||
headers: {
|
headers: {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user