79 lines
2.4 KiB
JavaScript
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),
|
|
};
|
|
};
|