Проксимеш с nodeJS на сайтах https - PullRequest
0 голосов
/ 11 декабря 2018

Мне было очень трудно узнать, как получить заголовок x-proxymesh-ip с туннелированием http в nodeJS.

Я мог бы заставить этот код работать, чтобы получить этот заголовок.

Я бы лучше использовал модуль запросов NodeJS, но не смог получить заголовок x-proxymesh-ip из первого вызова 'CONNECT', этот код работает хорошо: я нашел его здесь

const request = require('request');

request({
    url    : 'http://www.google.com',
    proxy  : 'http://fr.proxymesh.com:31280'
    tunnel : true
}, (err, res, body) => {
    ...
});

если вам не важно знать, что прокси-сервер использует ip ведьмы, это нормально, но если вам нужна эта информация, вам нужно сделать это, как показано ниже.

аутентификация не обязательна, если вы настроили авторизованныйСписки IP-адресов

, которые вам нужны, вы должны указать точки сайта в пути, а также в заголовке узла и после снова в методе get.

сразу после первого подключения вы можете получить x-заголовок proxymesh-ip

Если кто-то знает, как заставить это работать с модулем запроса, добро пожаловать

const http = require('http')
const https = require('https')
const username = 'username'
const password = 'password'
const auth = 'Basic ' + Buffer.from(username + ':' + password).toString('base64');

http.request({
     host: 'fr.proxymesh.com', // IP address of proxy server
     port: 31280, // port of proxy server
     method: 'CONNECT',
     path: 'api.ipify.org', // some destination,
     headers: {
         'Host' : "https://api.ipify.org",
         'Proxy-Authorization': auth
         },
     }).on('connect', (res, socket) => {
         if (res.statusCode === 200) { // connected to proxy server
             //get the ip used by proxymesh here
             console.log("IP : "+res.headers["x-proxymesh-ip"]);
             https.get({
                     host: 'api.ipify.org',
                     socket: socket, // using a tunnel
                     agent: false    // cannot use a default agent
                     path: '/' //put here the path ont the target site
             }, (res) => {
                 let chunks = []
                 res.on('data', chunk => chunks.push(chunk));
                 res.on('end', () => {
                         console.log('DONE', Buffer.concat(chunks).toString('utf8'))
                 })
             })
         }
     }).on('error', (err) => {
           console.error('error', err)
     }).end();
...