Файл http-proxy.js
var otherServerAnswer = Buffer.from(
JSON.stringify(
{data: [1, 2, 3]} // Ваши данные, которые вы хотите передать.
)
, 'utf-8'
);
var proxyURL = '/get/data' // null <-- Адрес, при запросе по которому, вы хотите передать ваши данные или null, если вам не нужна возврат ваших данных в ответ на запрос по указанном адресу.
, proxyServerHostname = '127.0.0.5' // Адрес промежуточного сервера.
, proxyServerPort = 80
, otherServerHostname = '127.0.0.1' // Адрес целевого сервера.
, otherServerPort = 8080;
var http = require('http')
, url = require('url');
var proxyServer = http.createServer(function (browserRequest, proxyServerResponse) {
console.log('Browser request: ' + browserRequest.method + ' ' + browserRequest.url);
var browserURL = url.parse(browserRequest.url);
var options = {
headers: browserRequest.headers
, method: browserRequest.method
, hostname: otherServerHostname
, port: otherServerPort
, path: browserURL.path
};
var proxyServerRequest = http.request(options);
browserRequest.on('data', function (chunk) {proxyServerRequest.write(chunk, 'binary');});
browserRequest.on('end', function () {proxyServerRequest.end();});
browserRequest.on('error', function (error) {console.log('Error with browser request: ' + error);});
proxyServerRequest.on('response', function (otherServerResponse) {
if (typeof browserRequest.url === 'string' && browserRequest.url === proxyURL) {
otherServerResponse.headers['content-length'] = Buffer.byteLength(otherServerAnswer);
proxyServerResponse.writeHead(otherServerResponse.statusCode, otherServerResponse.headers);
proxyServerResponse.end(otherServerAnswer, 'binary');
} else {
var chunks = [];
otherServerResponse.on('data', function (chunk) {
// Закомментированные строки для проверки правильности передачи данных.
// Конвертация из бинарных данных в строку и обратно.
// chunk = chunk.toString('utf-8');
// chunk = JSON.parse(chunk);
// chunk = JSON.stringify(chunk);
// chunk = Buffer.from(chunk, 'utf-8');
// console.log(Buffer.byteLength(chunk));
chunks.push(chunk);
});
otherServerResponse.on('end', function () {
// console.log(Buffer.concat(chunks).toString('utf-8'));
proxyServerResponse.writeHead(otherServerResponse.statusCode, otherServerResponse.headers);
proxyServerResponse.end(Buffer.concat(chunks), 'binary');
});
}
otherServerResponse.on('error', function (error) {console.log('Error with other server response: ' + error);});
});
proxyServerRequest.on('error', function (error) {console.log('Error with other proxy server request: ' + error);});
});
proxyServer.listen(proxyServerPort, proxyServerHostname, function (error) {
if (error) {throw error;}
console.log('Proxy server started at ' + proxyServerHostname + ':' + proxyServerPort);
});
////////////////////////////////////////////////////////////////////////////////
/* Пример кода целевого сервера для тестирования работы промежуточного сервера.
var otherServer = http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/html'});
response.write('OK');
response.end('BYE');
});
otherServer.listen(otherServerPort, otherServerHostname, function (error) {
if (error) {throw error;}
console.log('Other server started at ' + otherServerHostname + ':' + otherServerPort);
});
*/
Комментариев нет:
Отправить комментарий