IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Node 发送 HTTP请求 -> 正文阅读

[网络协议]Node 发送 HTTP请求

1、发送GET请求

? ? ? ? 如果你有自定义的需求,可以访问官网:

HTTP | Node.js v12.22.7 Documentation

let http = require('http');
// 格式化返回的参数 对json格式的数据进行格式化
function formatResData(data, headers) {
  let type = headers['content-type'];
  if (!type || type && type.indexOf('application/json') !== -1) {
    if (typeof data === 'string') {
      try {
        data = JSON.parse(data);
      } catch (e) { /* Ignore */ }
    }
  }
  return data;
}
// 封装get请求
function get(url, headers = {}) {
  return new Promise((resolve, reject) => {
    const options = {
      headers: headers
    };
    const req = http.get(url, options, res => {
        let had = false;
        res.setEncoding('utf8');
        // 监听返回的数据
        res.on('data', (chunk) => {
          had = true;
          // 数据格式化
          res.data = formatResData(chunk, res.headers);
          resolve(res);
        });
        // 监听接口请求完成, 除非error,最终都会执行end;
        res.on('end', () => {
          if (had) return;
          resolve(res);
        });
    });
    req.on('error', e => {
      reject(e);
    });
  }).catch(e => {
    console.error('Request error: ' + url + ', Method:' + 'GET' + ',Error message:', e);
    throw new Error(e ? e : 'Request error');
  })
}
// 调用示例
let headers = {
    Cookie: 'xxxxxx'
};
get('http:xxxxxx', headers).then(res => {
    // res.statusCode为接口返回的状态码, res.data为接口返回的数据
    console.log(res.statusCode, res.data);
});

2、发送POST请求

? ??????如果你有自定义的需求,可以访问官网:

HTTP | Node.js v12.22.7 Documentation

let http = require('http');
// 封装POST请求
function post(url, data, headers = {}) {
  return new Promise(resolve => {
    const options = {
      method: 'POST',
      headers: headers
    };
    const req = http.request(url, options, res => {
      let had = false;
      res.setEncoding('utf8');
      res.on('data', (chunk) => {
        had = true;
        // 当接口返回的是json格式数据时可以使用JSON.parse
        res.data = formatResData(chunk, res.headers);
        resolve(res);
      });
      // 监听接口请求完成, 除非error,最终都会执行end;
      res.on('end', () => {
        if (had) return;
        resolve(res);
      });
    });
    req.on('error', e => {
      reject(e);
    });
    // 写入请求的数据
    data && req.write(data);
    req.end();
  }).catch(e => {
    console.error('Request error: ' + url + ', Method:' + 'GET' + ',Error message:', e);
    throw new Error(e ? e : 'Request error');
  })
}
// 调用示例
let data = {
    name: 'xxx'
}
// 发送form表单格式数据
data = qs.stringify(data);
// 设置请求头(Content-Type)为form表单格式
let headers = {
  'Content-Type': 'application/x-www-form-urlencoded',
  'Cookie': 'xxxxx'
};
post('http:xxx', data, headers).then(res => {
   // res.statusCode为接口返回的状态码, res.data为接口返回的数据
   console.log(res.statusCode, res.data);
})

3、node开启的服务支持跨域

? ? ? ? 如果你需要在请求头接受cookie和Token进行权限验证,'Access-Control-Allow-Headers'里面需要添加Set-Cookie和接受的请求头名称,例如下面的例子中Authorization为接受的请求头名称。

var app = express();
// 允许跨域
app.use((req, res, next) => {
	res.set({
		'Access-Control-Allow-Credentials': true, //允许后端发送cookie
		'Access-Control-Allow-Origin': req.headers.origin || '*', //任意域名都可以访问,或者基于我请求头里面的域
		'Access-Control-Allow-Headers': 'X-Requested-With,Content-Type,Set-Cookie,Authorization', //设置请求头格式和类型
		'Access-Control-Allow-Methods': 'PUT,POST,GET,DELETE,OPTIONS',//允许支持的请求方式
		'Content-Type': 'application/json; charset=utf-8'//默认与允许的文本格式json和编码格式
  })
  req.method === 'OPTIONS' ? res.status(200).end() : next()
})

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-12-23 16:03:14  更:2021-12-23 16:04:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:46:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码