欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

nodejs實(shí)現(xiàn)的http、https 請(qǐng)求封裝操作示例

 更新時(shí)間:2020年02月06日 12:05:11   作者:李瓊濤  
這篇文章主要介紹了nodejs實(shí)現(xiàn)的http、https 請(qǐng)求封裝操作,結(jié)合實(shí)例形式分析了node.js針對(duì)http、https 請(qǐng)求的封裝與使用相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了nodejs實(shí)現(xiàn)的http、https 請(qǐng)求封裝操作。分享給大家供大家參考,具體如下:

libs/request.js

const URL = require('url');
const zlib = require('zlib');
const http = require('http');
const https = require('https');
const qs = require('querystring');
function Request(cookie) {
 this.cookies = [];
 if (cookie !== undefined) {
 this.setCookie(cookie);
 }
}
Request.prototype.getHeaders = function(host, postData) {
 let headers = {
 'Host': host,
 'Pragma': 'no-cache',
 'Connection': 'keep-alive',
 'Cache-Control': 'no-cache',
 'Content-Type': 'application/x-www-form-urlencoded',
 'Accept-Language': 'zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4,es;q=0.2',
 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1',
 };
 if (this.cookies.length) {
 headers.Cookie = this.cookies.join('; ');
 }
 if (postData != '') {
 headers['Content-Length'] = Buffer.byteLength(postData);
 }
 return headers;
}
Request.prototype.setCookie = function(cookie) {
 let cookies = cookie.split(';');
 for (let c of cookies) {
 c = c.replace(/^\s/, '');
 this.cookies.push(c);
 }
 return this;
}
Request.prototype.request = function(method, url, params) {
 let postData = qs.stringify(params || {});
 let urlObj = URL.parse(url);
 let protocol = urlObj.protocol;
 let options = {
 hostname: urlObj.host,
 port: urlObj.port,
 path: urlObj.path,
 method: method,
 headers: this.getHeaders(urlObj.host, postData),
 };
 return new Promise((resolve, reject) => {
 let req = (protocol == 'http:' ? http : https).request(options, (res) => {
  let chunks = [];
  res.on('data', (data) => {
  chunks.push(data);
  });
  res.on('end', () => {
  let buffer = Buffer.concat(chunks);
  let encoding = res.headers['content-encoding'];
  if (encoding == 'gzip') {
   zlib.gunzip(buffer, function(err, decoded) {
   resolve(decoded.toString());
   });
  } else if (encoding == 'deflate') {
   zlib.inflate(buffer, function(err, decoded) {
   resolve(decoded.toString());
   });
  } else {
   resolve(buffer.toString());
  }
  });
 });
 req.on('error', (e) => {
  reject(e);
 });
 if (postData != '') {
  req.write(postData);
 }
 req.end();
 })
}
Request.prototype.get = function(url) {
 return this.request('GET', url, null);
}
Request.prototype.post = function(url, params) {
 return this.request('POST', url, params);
}
module.exports = function(cookie) {
 return new Request(cookie);
}

test.js

const request = require('./request')();
(async function() {
 let res = await request.get('http://www.axita.com.cn/');
 console.log(res);
})();

執(zhí)行命令

nodemon test.js

希望本文所述對(duì)大家node.js程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • VsCode無(wú)法識(shí)別node問(wèn)題解決過(guò)程

    VsCode無(wú)法識(shí)別node問(wèn)題解決過(guò)程

    這篇文章主要給大家介紹了關(guān)于VsCode無(wú)法識(shí)別node問(wèn)題解決的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Node.js 路由的實(shí)現(xiàn)方法

    Node.js 路由的實(shí)現(xiàn)方法

    這篇文章主要介紹了Node.js 路由的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • typescript nodejs 依賴注入實(shí)現(xiàn)方法代碼詳解

    typescript nodejs 依賴注入實(shí)現(xiàn)方法代碼詳解

    今天分享的是用typescript語(yǔ)言實(shí)現(xiàn)的ioc模式,這邊用到的主要組件是 reflect-metadata 這個(gè)組件可以獲取或者設(shè)置元數(shù)據(jù)信息,接下來(lái)通過(guò)本文給大家介紹typescript nodejs 依賴注入實(shí)現(xiàn)方法,需要的朋友可以參考下
    2019-07-07
  • node實(shí)現(xiàn)shell命令管理工具及commander.js學(xué)習(xí)

    node實(shí)現(xiàn)shell命令管理工具及commander.js學(xué)習(xí)

    這篇文章主要為大家介紹了node實(shí)現(xiàn)shell命令管理工具及commander.js學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 基于Node.js構(gòu)建一個(gè)靈活的CLI命令行工具

    基于Node.js構(gòu)建一個(gè)靈活的CLI命令行工具

    在軟件開發(fā)中,命令行界面(CLI)工具是必不可少的助手,本文主要介紹了如何使用Node.js構(gòu)建一個(gè)靈活的CLI工具,涵蓋從基礎(chǔ)命令處理到復(fù)雜的交互式問(wèn)答和遠(yuǎn)程模板下載,需要的可以參考下
    2024-03-03
  • 安裝node.js和npm的一些常見報(bào)錯(cuò)

    安裝node.js和npm的一些常見報(bào)錯(cuò)

    NVM(Node?Version?Manager)是一個(gè)用于在同一機(jī)器上同時(shí)安裝并管理多個(gè)Node.js版本的工具,這篇文章主要給大家介紹了關(guān)于安裝node.js和npm的一些常見報(bào)錯(cuò),需要的朋友可以參考下
    2023-06-06
  • 深入探究node之Transform

    深入探究node之Transform

    這篇文章主要介紹了深入探究node之Transform,本文深入內(nèi)部闡述Transform的運(yùn)行機(jī)理及使用技巧,有興趣的可以了解一下
    2017-07-07
  • nodejs密碼加密中生成隨機(jī)數(shù)的實(shí)例代碼

    nodejs密碼加密中生成隨機(jī)數(shù)的實(shí)例代碼

    本篇文章主要介紹了nodejs密碼加密中生成隨機(jī)數(shù)的實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • NodeJs從頭到尾構(gòu)建一個(gè)Typescript項(xiàng)目的全過(guò)程

    NodeJs從頭到尾構(gòu)建一個(gè)Typescript項(xiàng)目的全過(guò)程

    前端開發(fā)中的各種腳手架對(duì)TypeScript支持已經(jīng)很完善了,這篇文章主要介紹了NodeJs從頭到尾構(gòu)建一個(gè)Typescript項(xiàng)目的全過(guò)程,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • node.js中npm包管理工具用法分析

    node.js中npm包管理工具用法分析

    這篇文章主要介紹了node.js中npm包管理工具用法,結(jié)合實(shí)例形式分析了node.js中npm包管理工具查看、安裝、更新、卸載等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2020-02-02

最新評(píng)論