2017-01-27 1 views
0

노드 js의 각 쿼리에 html 요청을 위해 프록시를 사용하고 싶습니다. 요청 모듈을 발견 했으므로 프록시를 사용하고 사용하기 쉽습니다.노드 js에서 프록시 풀을 사용하는 방법?

간단한 요청과 함께 잘 작동하지만 프록시 풀은 좋지 않습니다.

  • 터널링 소켓을 설정할 수 없습니다, 원인은 = ECONNREFUSED
  • 터널링 소켓 연결을 설정할 수 없습니다,에 statusCode (400)에게
  • 터널링 소켓을 설정할 수 없습니다, 원인 = EHOSTUNREACH를 연결 = 그것은 나에게 오류가 발생합니다 0.0.13.64:80 - 로컬 (192.168.1.174:54491)

해결 방법은 무엇입니까?

var Promise = require('bluebird'); 

// Rounting 
var koa = require('koa'); 
var router = require('koa-router')(); 
var koaRestMongoose = require('koa-rest-mongoose'); 
var cors = require('koa-cors'); 

var mongoUrl = '127.0.0.1:27017/db'; 
var mongoose = require('mongoose'); 
    mongoose.connect(mongoUrl); 

// PROXY 
// This insert proxy list to the db/proxy 
var proxy = require("./proxy")(mongoUrl, 'proxy'); 

var jsProxyPool = require('proxy-pool'); 
var mongoDbDataAccess = new jsProxyPool.MongoAccess(mongoUrl, 'proxy'); 
var poolConfig = new jsProxyPool.ProxyPoolConfiguration(mongoDbDataAccess, 20*1000); 
var pool = new jsProxyPool.ProxyPool(poolConfig); 

// Requesting 
var request = require('request'); 

router.get('/url/:url', function*() { 
    var promise = new Promise((resolve, reject) => { 

    pool.getProxy((err, proxy) => { 

     var proxy = proxy; 
     var url = 'https://google.com/'; 

     request({ 
     url: url, 
     proxy: { 
      host: proxy._address, 
      port: proxy._port, 
     } 
     }, (error, response, body) => { 
      if (!error && response.statusCode == 200) { 
       resolve(body); 
      } else { 
       resolve('Proxy: '+proxy._address+':'+proxy._port + '\n' + error); 
      } 
     }); 
    }); 
    }); 
    this.body = yield promise; 
}); 

var app = koa(); 
app.use(cors()); 
app.use(router.routes()); 
app.listen(8005); 

답변

0

에이전트를 추가했으며 문제가 해결되고 프록시가 살아 있어야합니다.

 var HttpsProxyAgent = require('https-proxy-agent'); 
     var proxy = { 
      host: '111.111.111.111', 
      port: 1111 
     }; 

     var agent = new HttpsProxyAgent(proxy); 

     request({ 
      url: url, 
      method: 'GET', 
      agent: agent, 
      timeout: 10000, 
      followRedirect: true, 
      maxRedirects: 10, 
     }, (error, response, body) => { 
      if (error) { 
       resolve(error); 
      } 
      resolve(body); 
     }); 
관련 문제