57 lines
1.4 KiB
JavaScript
57 lines
1.4 KiB
JavaScript
|
const http = require('http');
|
||
|
const https = require('https');
|
||
|
|
||
|
const makeRequest = async (url) => {
|
||
|
return new Promise((resolve) => {
|
||
|
const client = url.startsWith('https://') ? https : http;
|
||
|
|
||
|
const req = client.get(url, (res) => {
|
||
|
let data = '';
|
||
|
|
||
|
res.on('data', (chunk) => {
|
||
|
data += chunk;
|
||
|
});
|
||
|
|
||
|
res.on('end', () => {
|
||
|
let parsed = data;
|
||
|
|
||
|
try {
|
||
|
if (typeof data === 'string' && data.trim().startsWith('{')) {
|
||
|
parsed = JSON.parse(data);
|
||
|
}
|
||
|
} catch (e) {
|
||
|
console.warn('Warning: JSON parse failed');
|
||
|
}
|
||
|
|
||
|
resolve({
|
||
|
statusCode: res.statusCode,
|
||
|
headers: res.headers,
|
||
|
body: parsed
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
req.on('error', (err) => {
|
||
|
console.error('Request failed:', err.message);
|
||
|
resolve({
|
||
|
statusCode: 500,
|
||
|
body: null,
|
||
|
error: err.message
|
||
|
});
|
||
|
});
|
||
|
|
||
|
req.setTimeout(2000, () => {
|
||
|
req.abort();
|
||
|
resolve({
|
||
|
statusCode: 408,
|
||
|
body: null,
|
||
|
error: 'Request timeout'
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
};
|
||
|
|
||
|
module.exports = {
|
||
|
makeRequest
|
||
|
};
|