options
<Object> | <string> | <URL>
protocol
<string> 使用的協議。默認爲 http:
。host
<string> 請求發送至的服務器的域名或 IP 地址。默認爲 localhost
。hostname
<string> host
的別名。爲了支持 url.parse()
,hostname
優先於 host
。family
<number> 當解析 host
和 hostname
時使用的 IP 地址族。 有效值是 4
或 6
。當未指定時,則同時使用 IP v4 和 v6。port
<number> 遠程服務器的端口。默認爲 80
。localAddress
<string> 爲網絡鏈接綁定的本地接口。socketPath
<string> Unix 域 Socket(使用 host:port 或 socketPath)。method
<string> 指定 HTTP 請求方法的字符串。默認爲 'GET'
。path
<string> 請求的路徑。默認爲 '/'
。 應包括查詢字符串(若有的話)。如 '/index.html?page=12'
。 當請求的路徑中包含非法字符時,會拋出異常。 目前只有空字符會被拒絕,但將來可能會變化。headers
<Object> 包含請求頭的對象。auth
<string> 基自己份驗證,如 'user:password'
用來計算 Authorization
請求頭。agent
<http.Agent> | <boolean> 控制 Agent
的行爲。 可能的值有:
undefined
(默認): 對該主機和端口使用 http.globalAgent
。Agent
對象:顯式地使用傳入的 Agent
。false
: 建立一個新的使用默認值的 Agent
。createConnection
<Function> 當不使用 agent
選項時,爲請求建立一個 socket 或流。 這能夠用於避免僅僅建立一個自定義的 Agent
類來覆蓋默認的 createConnection
函數。詳見 agent.createConnection()
。timeout
<number>: 指定 socket 超時的毫秒數。 它設置了 socket 等待鏈接的超時時間。callback
<Function>Node.js 爲每臺服務器維護多個鏈接來進行 HTTP 請求。 該函數容許顯式地發出請求。html
options
能夠是一個對象、或字符串、或 URL
對象。 若是 options
是一個字符串,它會被自動使用 url.parse()
解析。 若是它是一個 URL
對象, 它會被默認轉換成一個 options
對象。node
可選的 callback
參數會做爲單次監聽器被添加到 'response'
事件。api
http.request()
返回一個 http.ClientRequest
類的實例。 ClientRequest
實例是一個可寫流。 若是須要經過 POST 請求上傳一個文件,則寫入到 ClientRequest
對象。服務器
例子:網絡
const postData = querystring.stringify({ 'msg' : 'Hello World!' }); const options = { hostname: 'www.google.com', port: 80, path: '/upload', method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': Buffer.byteLength(postData) } }; const req = http.request(options, (res) => { console.log(`狀態碼: ${res.statusCode}`); console.log(`響應頭: ${JSON.stringify(res.headers)}`); res.setEncoding('utf8'); res.on('data', (chunk) => { console.log(`響應主體: ${chunk}`); }); res.on('end', () => { console.log('響應中已無數據。'); }); }); req.on('error', (e) => { console.error(`請求遇到問題: ${e.message}`); }); // 寫入數據到請求主體 req.write(postData); req.end();
注意,在例子中調用了 req.end()
。 使用 http.request()
必須老是調用 req.end()
來代表請求的結束,即便沒有數據被寫入請求主體。app
若是請求過程當中遇到任何錯誤(DNS 解析錯誤、TCP 級的錯誤、或實際的 HTTP 解析錯誤),則在返回的請求對象中會觸發 'error'
事件。 對於全部的 'error'
事件,若是沒有註冊監聽器,則拋出錯誤。socket
如下是須要注意的幾個特殊的請求頭。函數
發送 'Connection: keep-alive'
會通知 Node.js,服務器的鏈接應一直持續到下一個請求。post
發送 'Content-Length'
請求頭會禁用默認的塊編碼。ui
發送 'Expect'
請求頭會當即發送請求頭。 一般狀況下,當發送 'Expect: 100-continue'
時,超時時間與 continue
事件的監聽器都須要被設置。
發送 Authorization
請求頭會替代 auth
選項計算基自己份驗證。
Example using a URL
as options
:
const { URL } = require('url'); const options = new URL('http://abc:xyz@example.com'); const req = http.request(options, (res) => { // ... });