模組http
http 模組封裝了HTTP 請求和回應的處理,讓我們可以輕鬆地建立http 伺服器,也可以模擬客戶端發起http 請求。使用http 模組,開發者可以很方便地編寫和處理HTTP 協定相關的程式碼
下面是一個簡單的例子,建立一個Web 伺服器,回傳一個hello world 的回應訊息:
1
2
3
4
5
6
7const http = require('http');
const server = new http.Server(8080, function(request) {
request.response.write('Hello World!');
});
server.start();
這個例子中,我們引入http 模組,然後定義了一個http 伺服器對象,並綁定到本地8080 連接埠號碼。當有請求傳送到這個連接埠號,回應會被設定為字串「Hello World!」。
同時http 模組也包含客戶端對象,http.Client模擬瀏覽器環境緩存cookie,並在訪問url的時候攜帶對應的cookie 的http 用戶端物件。你可以用http.Client造訪http 介面請求、進行http 下載等等一系列http 相關的操作。下面是http.Client的應用範例:
1
2
3
4var http = require('http');
var httpClient = new http.Client();
httpClient.get('http://fibjs.org');
在上面的範例中,創建了一個http.Client對象,然後呼叫get
方法想fibjs.org 發起了http GET 請求。
另外,http.Client還有其他一些屬性和方法可以被調用,如cookies
等
https 模組是http 模組的別名,使用require('https')
同樣可以得到http 模組。
物件
Request
建立一個http 請求對象,參見HttpRequest
1HttpRequest http.Request;
Response
建立一個http 回應對象,參見HttpResponse
1HttpResponse http.Response;
Cookie
建立一個http cookie 對象,參見HttpCookie
1HttpCookie http.Cookie;
Server
建立一個http 伺服器,參見HttpServer
1HttpServer http.Server;
Client
建立一個http 客戶端,參見HttpClient
1HttpClient http.Client;
HttpsServer
建立一個https 伺服器,參見HttpsServer
1HttpsServer http.HttpsServer;
Handler
建立一個http 協定處理器對象,參見HttpHandler
1HttpHandler http.Handler;
Repeater
建立一個http 請求轉送處理器對象,參見HttpRepeater
1HttpRepeater http.Repeater;
靜態函數
fileHandler
建立一個http 靜態檔案處理器,用以靜態檔案回應http 訊息
1
2
3static Handler http.fileHandler(String root,
Object mimes = {},
Boolean autoIndex = false);
呼叫參數:
- root: String, 檔案根路徑
- mimes: Object, 擴充mime 設定
- autoIndex: Boolean, 是否支援瀏覽目錄文件,缺省為false,不支持
回傳結果:
- Handler, 傳回一個靜態檔案處理器用於處理http 訊息
fileHandler 支援gzip 預壓縮,當請求接受gzip 編碼,且相同路徑下filename.ext.gz 文件存在時,將直接返回此文件, 從而避免重複壓縮帶來伺服器負載。
setClientCert
設定缺省客戶端證書
1
2static http.setClientCert(X509Cert crt,
PKey key);
呼叫參數:
request
發送http 請求到指定的流對象,並傳回結果
1
2static HttpResponse http.request(Stream conn,
HttpRequest req) async;
呼叫參數:
- conn:Stream, 指定處理請求的流對象
- req:HttpRequest, 要發送的HttpRequest物件
回傳結果:
- HttpResponse, 回傳伺服器回應
發送http 請求到指定的流對象,並傳回結果
1
2
3static HttpResponse http.request(Stream conn,
HttpRequest req,
SeekableStream response_body) async;
呼叫參數:
- conn:Stream, 指定處理請求的流對象
- req:HttpRequest, 要發送的HttpRequest物件
- response_body:SeekableStream, 指定response.body 的流
回傳結果:
- HttpResponse, 回傳伺服器回應
請求指定的url,並回傳結果
1
2
3static HttpResponse http.request(String method,
String url,
Object opts = {}) async;
呼叫參數:
回傳結果:
- HttpResponse, 回傳伺服器回應
opts 包含請求的附加選項,支援的內容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16{
"method": "GET", // specify the http request method: GET, POST, etc, default: GET.
"protocol": "http",
"slashes": true,
"username": "",
"password": "",
"hostname": "",
"port": "",
"pathname": "",
"query": {},
"body": SeekableStream | Buffer | String | {},
"json": {},
"pack": {},
"headers": {},
"response_body": SeekableStream // specify response.body stream
}
其中body,json,pack 不得同時出現。缺省為{},不包含任何附加資訊
用GET 方法請求指定的url,並回傳結果,等同於request("GET", ...)
1
2static HttpResponse http.request(String url,
Object opts = {}) async;
呼叫參數:
回傳結果:
- HttpResponse, 回傳伺服器回應
opts 包含請求的附加選項,支援的內容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15{
"method": "GET", // specify the http request method: GET, POST, etc, default: GET.
"protocol": "http",
"slashes": true,
"username": "",
"password": "",
"hostname": "",
"port": "",
"pathname": "",
"query": {},
"body": SeekableStream | Buffer | String | {},
"json": {},
"pack": {},
"headers": {}
}
其中body,json,pack 不得同時出現。缺省為{},不包含任何附加資訊
請求opts 指定的url,並回傳結果
1static HttpResponse http.request(Object opts) async;
呼叫參數:
- opts: Object, 指定附加訊息
回傳結果:
- HttpResponse, 回傳伺服器回應
opts 包含請求的附加選項,支援的內容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15{
"method": "GET", // specify the http request method: GET, POST, etc, default: GET.
"protocol": "http",
"slashes": true,
"username": "",
"password": "",
"hostname": "",
"port": "",
"pathname": "",
"query": {},
"body": SeekableStream | Buffer | String | {},
"json": {},
"pack": {},
"headers": {}
}
其中body,json,pack 不得同時出現。缺省為{},不包含任何附加資訊
get
用GET 方法請求指定的url,並回傳結果,等同於request("GET", ...)
1
2static HttpResponse http.get(String url,
Object opts = {}) async;
呼叫參數:
回傳結果:
- HttpResponse, 回傳伺服器回應
opts 包含請求的附加選項,支援的內容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15{
"method": "GET", // specify the http request method: GET, POST, etc, default: GET.
"protocol": "http",
"slashes": true,
"username": "",
"password": "",
"hostname": "",
"port": "",
"pathname": "",
"query": {},
"body": SeekableStream | Buffer | String | {},
"json": {},
"pack": {},
"headers": {}
}
其中body,json,pack 不得同時出現。缺省為{},不包含任何附加資訊
post
用POST 方法請求指定的url,並回傳結果,等同於request("POST", ...)
1
2static HttpResponse http.post(String url,
Object opts = {}) async;
呼叫參數:
回傳結果:
- HttpResponse, 回傳伺服器回應
opts 包含請求的附加選項,支援的內容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15{
"method": "GET", // specify the http request method: GET, POST, etc, default: GET.
"protocol": "http",
"slashes": true,
"username": "",
"password": "",
"hostname": "",
"port": "",
"pathname": "",
"query": {},
"body": SeekableStream | Buffer | String | {},
"json": {},
"pack": {},
"headers": {}
}
其中body,json,pack 不得同時出現。缺省為{},不包含任何附加資訊
del
用DELETE 方法請求指定的url,並回傳結果,等同於request("DELETE", ...)
1
2static HttpResponse http.del(String url,
Object opts = {}) async;
呼叫參數:
回傳結果:
- HttpResponse, 回傳伺服器回應
opts 包含請求的附加選項,支援的內容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15{
"method": "GET", // specify the http request method: GET, POST, etc, default: GET.
"protocol": "http",
"slashes": true,
"username": "",
"password": "",
"hostname": "",
"port": "",
"pathname": "",
"query": {},
"body": SeekableStream | Buffer | String | {},
"json": {},
"pack": {},
"headers": {}
}
其中body,json,pack 不得同時出現。缺省為{},不包含任何附加資訊
put
用PUT 方法請求指定的url,並回傳結果,等同於request("PUT", ...)
1
2static HttpResponse http.put(String url,
Object opts = {}) async;
呼叫參數:
回傳結果:
- HttpResponse, 回傳伺服器回應
opts 包含請求的附加選項,支援的內容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15{
"method": "GET", // specify the http request method: GET, POST, etc, default: GET.
"protocol": "http",
"slashes": true,
"username": "",
"password": "",
"hostname": "",
"port": "",
"pathname": "",
"query": {},
"body": SeekableStream | Buffer | String | {},
"json": {},
"pack": {},
"headers": {}
}
其中body,json,pack 不得同時出現。缺省為{},不包含任何附加資訊
patch
用PATCH 方法請求指定的url,並回傳結果,等同於request("PATCH", ...)
1
2static HttpResponse http.patch(String url,
Object opts = {}) async;
呼叫參數:
回傳結果:
- HttpResponse, 回傳伺服器回應
opts 包含請求的附加選項,支援的內容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15{
"method": "GET", // specify the http request method: GET, POST, etc, default: GET.
"protocol": "http",
"slashes": true,
"username": "",
"password": "",
"hostname": "",
"port": "",
"pathname": "",
"query": {},
"body": SeekableStream | Buffer | String | {},
"json": {},
"pack": {},
"headers": {}
}
其中body,json,pack 不得同時出現。缺省為{},不包含任何附加資訊
head
用HEAD 方法請求指定的url,並回傳結果,等同於request("HEAD", ...)
1
2static HttpResponse http.head(String url,
Object opts = {}) async;
呼叫參數:
回傳結果:
- HttpResponse, 回傳伺服器回應
opts 包含請求的附加選項,支援的內容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15{
"method": "GET", // specify the http request method: GET, POST, etc, default: GET.
"protocol": "http",
"slashes": true,
"username": "",
"password": "",
"hostname": "",
"port": "",
"pathname": "",
"query": {},
"body": SeekableStream | Buffer | String | {},
"json": {},
"pack": {},
"headers": {}
}
其中body,json,pack 不得同時出現。缺省為{},不包含任何附加資訊
靜態屬性
STATUS_CODES
Object, 傳回標準的HTTP 回應狀態碼的集合,以及各自的簡短描述。
1static readonly Object http.STATUS_CODES;
cookies
NArray, 返回http客戶端的HttpCookie物件列表
1static readonly NArray http.cookies;
timeout
Integer, 查詢與設定逾時時間
1static Integer http.timeout;
enableCookie
Boolean, cookie 功能開關,預設開啟
1static Boolean http.enableCookie;
autoRedirect
Boolean, 自動redirect 功能開關,預設開啟
1static Boolean http.autoRedirect;
enableEncoding
Boolean, 自動解壓縮功能開關,預設開啟
1static Boolean http.enableEncoding;
maxHeadersCount
Integer, 查詢並設定最大請求頭個數,缺省為128
1static Integer http.maxHeadersCount;
maxHeaderSize
Integer, 查詢並設定最大請求頭長度,預設為8192
1static Integer http.maxHeaderSize;
maxBodySize
Integer, 查詢並設定body 最大尺寸,以MB 為單位,預設為-1,不限制尺寸
1static Integer http.maxBodySize;
userAgent
String, 查詢與設定http 請求中的瀏覽器標識
1static String http.userAgent;
poolSize
Integer, 查詢與設定keep-alive 最大快取連線數,預設值128
1static Integer http.poolSize;
poolTimeout
Integer, 查詢與設定keep-alive 快取連線逾時時間,預設值10000 ms
1static Integer http.poolTimeout;
http_proxy
String, 查詢與設定http 請求代理,支援http/https/socks5 代理
1static String http.http_proxy;
https_proxy
String, 查詢與設定https 請求代理,支援http/https/socks5 代理,不設定,或設定為空,則重複使用http_proxy
1static String http.https_proxy;