標籤:node.js Proxy 伺服器 google 代理
接觸 Node.js 已有多年,一直喜歡它的單執行緒模式和非同步IO特性,以及 JavaScript 語言本身的靈活性。同時,JavaScript 前後端通吃,在全棧開發領域具有獨特的優勢。今天就來看看作為服務端語言的 JavaScript,完成一個簡單的Proxy 伺服器功能是多麼容易。
簡單地說,Proxy 伺服器就是代理使用者訪問目標網站的中繼伺服器。作為前端開發人員,代理的常見用途是跨域訪問後台 API。當然,還可以用來科學上網。今天要分享的代碼,就是跟科學上網有關。
話不多說,先上 code:
var express = require(‘express‘);var request = require(‘request‘);var app = express();app.use(‘/‘, function(req, res) { var url = ‘https://www.baidu.com/‘ + req.url; req.pipe(request(url)).pipe(res);});app.listen(process.env.PORT || 3000);
不到 10 行的代碼,就實現了簡單的Proxy 伺服器功能。是不是很神奇?
熟悉 Node.js 的話應該很容易看明白這幾行代碼。首先載入 express 模組,這個是建立 HTTP 伺服器的一個流行架構。然後是 request,它封裝了 HTTP 要求的各種方法,讓發起請求變得非常容易。接下來執行個體化一個 express 對象,設定訪問路由。最後監聽 3000 連接埠。
先看效果。儲存上述代碼到檔案 proxy.js,在檔案所在路徑執行:
node proxy.js
用瀏覽器開啟http://localhost:3000/
650) this.width=650;" src="http://upload-images.jianshu.io/upload_images/1618526-2dd2c3b1dfdffc68.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" class="imagebubble-image" style="height:auto;vertical-align:middle;border:0px;" alt="1240" />
HTTP 代理
關鍵代碼在路由處理方法內。
req.pipe(request(url)).pipe(res);
這個 pipe 方法很神奇,正如它的名字(管道)一樣,它把瀏覽器的請求資料傳給 request 用戶端,然後將目標伺服器的響應資料傳回瀏覽器。這代碼太TM簡潔了!
那麼,怎麼實現科學上網呢?對,把代碼放到沒有網路封鎖的伺服器上運行,就OK了。比如,這個 任度搜 www.rendoso.com 背後就是 Google 代理。
本文出自 “空引” 部落格,請務必保留此出處http://kayson.blog.51cto.com/2514189/1879952
8 行 Node.js 代碼實現Proxy 伺服器