Node.js 设置代理有两种方式:superagent-proxy 和 https-proxy-agent,支持 http 和 https 两种代理协议

proxy-agent 官网:https://www.npmjs.com/package/proxy-agent

superagent-proxy​  官网https://www.npmjs.com/package/superagent-proxy

http-proxy-agent 官网:https://www.npmjs.com/package/http-proxy-agent

https-proxy-agent 官网:https://www.npmjs.com/package/https-proxy-agent

socks-proxy-agent 官网:https://www.npmjs.com/package/socks-proxy-agent

 

安装方法

cd /usr/local/node/lib/node_modules/npm     // 必须进入此目录安装,否则会报错

// sudo npm install request
sudo npm install proxy-agent
sudo npm install superagent-proxy
sudo npm install http-proxy-agent
sudo npm install https-proxy-agent
sudo npm install socks-proxy-agent

 

protocol proxy agent for httprequests proxy agent for httpsrequests example
http http-proxy-agent https-proxy-agent http://proxy-server-over-tcp.com:3128
https http-proxy-agent https-proxy-agent https://proxy-server-over-tls.com:3129
socks(v5) socks-proxy-agent socks-proxy-agent socks://username:password@some-socks-proxy.com:9050 (username & password are optional)
socks5 socks-proxy-agent socks-proxy-agent socks5://username:password@some-socks-proxy.com:9050 (username & password are optional)
socks4 socks-proxy-agent socks-proxy-agent socks4://some-socks-proxy.com:9050
pac pac-proxy-agent pac-proxy-agent pac+http://www.example.com/proxy.pac

 

示例代码

1. superagent-proxy 官方示例

vim nodejs-proxy-01.js

var request = require('superagent');
 
// extend with Request#proxy() 
require('superagent-proxy')(request);
 
// HTTP, HTTPS, or SOCKS proxy to use 
var proxy_uri = process.env.http_proxy || 'http://79.137.80.210:3128';
 
request
  .get(process.argv[2] || 'https://apps.bdimg.com/libs/jquery-i18n/1.1.1/jquery.i18n.min.js')
  .proxy(proxy_uri)
  .buffer(true)
  .set('User-Agent','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36')
  .set('Host','apps.bdimg.com')
  .set('Accept','text/html,application/xhtml+xml,application/xml,application/x-javascript;q=0.9,image/webp,image/apng,*/*;q=0.8')
  .set('Accept-Encoding','gzip, deflate, br')
  .end(onresponse);
 
function onresponse (err, res) {
  if (err) {
    console.log(err);
  } else {
    console.log(res.status, res.headers);
    console.log(res.body);
    console.log(res.text);
  }
}

运行结果:

node-js-she-zhi-dai-li-de-liang-zhong-fang-shi-superagent-proxy-he-https-proxy-agent-01

 

2. https-proxy-agent 官方示例

vim nodejs-proxy-02.js

var url = require('url');
var https = require('https');
var HttpsProxyAgent = require('https-proxy-agent');
 
// HTTP/HTTPS proxy to connect to 
var proxy = process.env.http_proxy || 'http://79.137.80.210:3128';
console.log('using proxy server %j', proxy);
 
// HTTPS endpoint for the proxy to connect to 
var endpoint = process.argv[2] || 'https://apps.bdimg.com/libs/jquery-i18n/1.1.1/jquery.i18n.min.js';
console.log('attempting to GET %j', endpoint);
var options = url.parse(endpoint);
 
// create an instance of the `HttpsProxyAgent` class with the proxy server information 
var agent = new HttpsProxyAgent(proxy);
options.agent = agent;

headers = {
  "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36",
  "Host": "apps.bdimg.com",
  "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
//  "Accept-Encoding": "gzip, deflate, br",
};
options.headers = headers;
 
https.get(options, function (res) {
  console.log('"response" event!', res.headers);
  res.pipe(process.stdout);
});

运行结果:

node-js-she-zhi-dai-li-de-liang-zhong-fang-shi-superagent-proxy-he-https-proxy-agent-02

 

完整的代理示例

/**
 * http://proxy.mimvp.com
 * 2017.7.20
 * 
 * https-proxy-agent : https://www.npmjs.com/package/https-proxy-agent
 * superagent-proxy  : https://www.npmjs.com/package/superagent-proxy
 */


////////////////////////// https-proxy-agent - success //////////////////////////

var url = require('url');
var https = require('https');
var HttpsProxyAgent = require('https-proxy-agent');
 
// HTTP/HTTPS proxy to connect to 
var proxy = 'http://79.137.80.210:3128';
console.log('using proxy server %j', proxy);
 
var endpoint = process.argv[2] || 'https://apps.bdimg.com/libs/jquery-i18n/1.1.1/jquery.i18n.min.js';
console.log('attempting to GET %j', endpoint);
var options = url.parse(endpoint);

 
// create an instance of the `HttpsProxyAgent` class with the proxy server information 
var agent = new HttpsProxyAgent(proxy);
options.agent = agent;
options.port = 443;
options.secureProxy = true;

headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36",
"Host": "apps.bdimg.com",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
};
options.headers = headers;
//console.log('options %j', options);
 
https.get(options, function (res) {
  console.log('"response" event!', res.headers);
  res.pipe(process.stdout);
});





////////////////////////// superagent-proxy - success //////////////////////////

var superagent = require('superagent');
require('superagent-proxy')(superagent);

function check(uri) {
	var proxy_ip = uri.toString().split(",")[0];
	var proxy_type = uri.toString().split(",")[1];
	var proxy_uri = "http://" + proxy_ip;			// http https both to http://ip:port
	console.log("proxy_uri : " + proxy_uri);
	
	superagent
	.get('https://apps.bdimg.com/libs/jquery-i18n/1.1.1/jquery.i18n.min.js')
	.proxy(proxy_uri)
	.buffer(true)
	.set('User-Agent','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36')
	.set('Host','apps.bdimg.com')
	.set('Accept','text/html,application/xhtml+xml,application/xml,application/x-javascript;q=0.9,image/webp,image/apng,*/*;q=0.8')
	.set('Accept-Encoding','gzip, deflate, br')
	.end(function onResponse(err, res) {
      if (err) {
          console.log(err);
      } else {
	        console.log(res.status, res.headers);
	        console.log(res.text);
      }
  });
};

//check('218.241.131.249:80,HTTP');	// http
check('79.137.80.210:3128,HTTPS');	// https

 

以上测试代理,均来自米扑代理,其网站支持http、https、socks4、socks5等多种类型代理,且代理质量非常高

米扑代理官网: http://proxy.mimvp.com

 

 

参考推荐

Node.js 安装与开发

Nodejs SuperAgent 安装与开发