File size: 1,358 Bytes
d32a453 5cdcb1c d572193 5cdcb1c d572193 5cdcb1c d572193 5cdcb1c d572193 5cdcb1c d572193 d32a453 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | const http = require('http');
const net = require('net');
const url = require('url');
const PORT = 7860;
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Gemini Proxy is running. Use HTTPS_PROXY environment variable.');
});
var counter=0;
// Handle the HTTP CONNECT method (for HTTPS tunneling)
server.on('connect', (req, clientSocket, head) => {
const { port, hostname } = url.parse(`//${req.url}`, false, true);
console.log(`${counter}: Tunneling to: ${hostname}:${port}`);
counter++;
const serverSocket = net.connect(port || 443, hostname, () => {
// Send 200 Connection Established to the client
clientSocket.write('HTTP/1.1 200 Connection Established\r\n' +
'Proxy-agent: Node.js-Proxy\r\n' +
'\r\n');
serverSocket.write(head);
// Pipe data between client and server
serverSocket.pipe(clientSocket);
clientSocket.pipe(serverSocket);
});
serverSocket.on('error', (err) => {
console.error(`Error connecting to ${hostname}:`, err.message);
clientSocket.end();
});
clientSocket.on('error', (err) => {
console.error('Client socket error:', err.message);
serverSocket.end();
});
});
server.listen(PORT, () => {
console.log(`Gemini Proxy server running on port ${PORT}`);
}); |