nodejs之http.request


http.request(options[, callback])

  • 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>
  • 返回: <http.ClientRequest>

Node.js 為每台服務器維護多個連接來進行 HTTP 請求。 該函數允許顯式地發出請求。

options 可以是一個對象、或字符串、或 URL 對象。 如果 options 是一個字符串,它會被自動使用 url.parse() 解析。 如果它是一個 URL 對象, 它會被默認轉換成一個 options 對象。

可選的 callback 參數會作為單次監聽器被添加到 'response' 事件。

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() 來表明請求的結束,即使沒有數據被寫入請求主體。

如果請求過程中遇到任何錯誤(DNS 解析錯誤、TCP 級的錯誤、或實際的 HTTP 解析錯誤),則在返回的請求對象中會觸發 'error' 事件。 對於所有的 'error' 事件,如果沒有注冊監聽器,則拋出錯誤。

以下是需要注意的幾個特殊的請求頭。

  • 發送 'Connection: keep-alive' 會通知 Node.js,服務器的連接應一直持續到下一個請求。

  • 發送 'Content-Length' 請求頭會禁用默認的塊編碼。

  • 發送 '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) => { // ... });


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM