cvsa/src/db/raw/aliyun-fc.mjs

79 lines
2.4 KiB
JavaScript

import { Buffer } from "node:buffer";
"use strict";
export const handler = async (event, _context) => {
const eventObj = JSON.parse(event);
console.log(`receive event: ${JSON.stringify(eventObj)}`);
let body = "Missing parameter: URL";
let statusCode = 400;
// User-Agent list
const userAgents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Safari/605.1.15",
"Mozilla/5.0 (Linux; Android 10; Pixel 3 XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Mobile Safari/537.36",
"Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) Gecko/20100101 Firefox/89.0",
];
// get http request body
if ("body" in eventObj) {
body = eventObj.body;
if (eventObj.isBase64Encoded) {
body = Buffer.from(body, "base64").toString("utf-8");
}
}
console.log(`receive http body: ${body}`);
// proxy the URL if it exists in eventObj
const refererUrl = "https://www.bilibili.com/"; // Replace with your desired referer and origin
if ("url" in eventObj) {
try {
const randomUserAgent = userAgents[Math.floor(Math.random() * userAgents.length)];
const response = await fetch(eventObj.url, {
headers: {
"User-Agent": randomUserAgent,
"Referer": refererUrl,
},
});
statusCode = response.status;
body = await response.text();
} catch (error) {
statusCode = 500;
body = `Error fetching URL: ${error.message}`;
}
} else if ("urls" in eventObj && Array.isArray(eventObj.urls)) {
const requests = eventObj.urls.map(async (url) => {
try {
const randomUserAgent = userAgents[Math.floor(Math.random() * userAgents.length)];
const response = await fetch(url, {
headers: {
"User-Agent": randomUserAgent,
"Referer": refererUrl,
},
});
const responseBody = await response.text();
return {
statusCode: response.status,
body: responseBody,
};
} catch (error) {
return {
statusCode: 500,
body: `Error fetching URL: ${error.message}`,
};
}
});
body = await Promise.all(requests);
statusCode = 200; // Assuming all URLs were processed successfully
}
return {
"statusCode": statusCode,
"body": JSON.stringify(body),
};
};