Module 基礎模組

模組http

http 模組封裝了HTTP 請求和回應的處理,讓我們可以輕鬆地建立http 伺服器,也可以模擬客戶端發起http 請求。使用http 模組,開發者可以很方便地編寫和處理HTTP 協定相關的程式碼

下面是一個簡單的例子,建立一個Web 伺服器,回傳一個hello world 的回應訊息:

1 2 3 4 5 6 7
const 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 4
var 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

1
HttpRequest http.Request;

Response

建立一個http 回應對象,參見HttpResponse

1
HttpResponse http.Response;

建立一個http cookie 對象,參見HttpCookie

1
HttpCookie http.Cookie;

Server

建立一個http 伺服器,參見HttpServer

1
HttpServer http.Server;

Client

建立一個http 客戶端,參見HttpClient

1
HttpClient http.Client;

HttpsServer

建立一個https 伺服器,參見HttpsServer

1
HttpsServer http.HttpsServer;

Handler

建立一個http 協定處理器對象,參見HttpHandler

1
HttpHandler http.Handler;

Repeater

建立一個http 請求轉送處理器對象,參見HttpRepeater

1
HttpRepeater http.Repeater;

靜態函數

fileHandler

建立一個http 靜態檔案處理器,用以靜態檔案回應http 訊息

1 2 3
static 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 2
static http.setClientCert(X509Cert crt, PKey key);

呼叫參數:

  • crt:X509Cert, 證書,用於發送給伺服器驗證客戶端
  • key:PKey, 私鑰,用於與客戶端會話

request

發送http 請求到指定的流對象,並傳回結果

1 2
static HttpResponse http.request(Stream conn, HttpRequest req) async;

呼叫參數:

回傳結果:


發送http 請求到指定的流對象,並傳回結果

1 2 3
static HttpResponse http.request(Stream conn, HttpRequest req, SeekableStream response_body) async;

呼叫參數:

回傳結果:


請求指定的url,並回傳結果

1 2 3
static HttpResponse http.request(String method, String url, Object opts = {}) async;

呼叫參數:

  • method: String, 指定http 請求方法:GET, POST 等
  • url: String, 指定url,必須是包含主機的完整url
  • opts: Object, 指定附加訊息

回傳結果:

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 2
static HttpResponse http.request(String url, Object opts = {}) async;

呼叫參數:

  • url: String, 指定url,必須是包含主機的完整url
  • opts: Object, 指定附加訊息

回傳結果:

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,並回傳結果

1
static HttpResponse http.request(Object opts) async;

呼叫參數:

  • opts: Object, 指定附加訊息

回傳結果:

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 2
static HttpResponse http.get(String url, Object opts = {}) async;

呼叫參數:

  • url: String, 指定url,必須是包含主機的完整url
  • opts: Object, 指定附加訊息

回傳結果:

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 2
static HttpResponse http.post(String url, Object opts = {}) async;

呼叫參數:

  • url: String, 指定url,必須是包含主機的完整url
  • opts: Object, 指定附加訊息

回傳結果:

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 2
static HttpResponse http.del(String url, Object opts = {}) async;

呼叫參數:

  • url: String, 指定url,必須是包含主機的完整url
  • opts: Object, 指定附加訊息

回傳結果:

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 2
static HttpResponse http.put(String url, Object opts = {}) async;

呼叫參數:

  • url: String, 指定url,必須是包含主機的完整url
  • opts: Object, 指定附加訊息

回傳結果:

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 2
static HttpResponse http.patch(String url, Object opts = {}) async;

呼叫參數:

  • url: String, 指定url,必須是包含主機的完整url
  • opts: Object, 指定附加訊息

回傳結果:

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 方法請求指定的url,並回傳結果,等同於request("HEAD", ...)

1 2
static HttpResponse http.head(String url, Object opts = {}) async;

呼叫參數:

  • url: String, 指定url,必須是包含主機的完整url
  • opts: Object, 指定附加訊息

回傳結果:

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 回應狀態碼的集合,以及各自的簡短描述。

1
static readonly Object http.STATUS_CODES;

cookies

NArray, 返回http客戶端的HttpCookie物件列表

1
static readonly NArray http.cookies;

timeout

Integer, 查詢與設定逾時時間

1
static Integer http.timeout;

enableCookie

Boolean, cookie 功能開關,預設開啟

1
static Boolean http.enableCookie;

autoRedirect

Boolean, 自動redirect 功能開關,預設開啟

1
static Boolean http.autoRedirect;

enableEncoding

Boolean, 自動解壓縮功能開關,預設開啟

1
static Boolean http.enableEncoding;

maxHeadersCount

Integer, 查詢並設定最大請求頭個數,缺省為128

1
static Integer http.maxHeadersCount;

maxHeaderSize

Integer, 查詢並設定最大請求頭長度,預設為8192

1
static Integer http.maxHeaderSize;

maxBodySize

Integer, 查詢並設定body 最大尺寸,以MB 為單位,預設為-1,不限制尺寸

1
static Integer http.maxBodySize;

userAgent

String, 查詢與設定http 請求中的瀏覽器標識

1
static String http.userAgent;

poolSize

Integer, 查詢與設定keep-alive 最大快取連線數,預設值128

1
static Integer http.poolSize;

poolTimeout

Integer, 查詢與設定keep-alive 快取連線逾時時間,預設值10000 ms

1
static Integer http.poolTimeout;

http_proxy

String, 查詢與設定http 請求代理,支援http/https/socks5 代理

1
static String http.http_proxy;

https_proxy

String, 查詢與設定https 請求代理,支援http/https/socks5 代理,不設定,或設定為空,則重複使用http_proxy

1
static String http.https_proxy;