123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- // 发送GET请求
- const {logger} = require("./logger");
- const http = require('http');
- const https = require('https');
- const fs = require("fs");
- //公共的请求头
- function getHeaders(headers, body) {
- if (body.length !== 0) {
- headers['Content-Length'] = Buffer.byteLength(body)
- }
- headers['Content-Type'] = 'application/json'
- return headers
- }
- function request_get(url, headers) {
- return new Promise((resolve, reject) => {
- var callback = function (res) {
- let data = '';
- // 监听数据事件来收集响应数据
- res.on('data', (chunk) => {
- data += chunk;
- });
- // 监听结束事件来处理响应结束
- res.on('end', () => {
- // logger.info(`响应体: ${data}`);
- resolve(data);
- });
- }
- var errorback = function errorback(e) {
- // logger.error(`请求遇到问题: ${e.message}`);
- reject(e);
- }
- // POST 请求的选项
- const options = {
- method: 'GET',
- headers: getHeaders(headers, "")
- };
- let httpsReq = null
- if (!url.includes("https")) {
- httpsReq = http.request(url, options, callback).on('error', errorback);
- } else {
- httpsReq = https.request(url, options, callback).on('error', errorback);
- }
- // 不要忘了关闭请求,以防止内存泄漏
- httpsReq.end();
- });
- }
- function request_post(url, param, headers) {
- return new Promise((resolve, reject) => {
- var callback = function (res) {
- let data = '';
- // 监听数据事件来收集响应数据
- res.on('data', (chunk) => {
- data += chunk;
- });
- // 监听结束事件来处理响应结束
- res.on('end', () => {
- // logger.info(`响应体: ${data}`);
- resolve(data);
- });
- }
- var errorback = function errorback(e) {
- // logger.error(`请求遇到问题: ${e.message}`);
- reject(e);
- }
- // POST 请求的数据
- const postData = JSON.stringify(param);
- // logger.info('请求参数:', postData, headers);
- // POST 请求的选项
- // logger.info('请求头:', headers);
- const options = {
- method: 'POST',
- headers: getHeaders(headers, postData)
- };
- var postReq = null;
- if (!url.includes("https")) {
- postReq = http.request(url, options, callback).on('error', errorback);
- } else {
- postReq = https.request(url, options, callback).on('error', errorback);
- }
- // 写入数据到请求体
- postReq.write(postData);
- // 结束请求
- postReq.end();
- })
- }
- function dowFile(url, fileName, dowPath, headers) {
- return new Promise((resolve, reject) => {
- // 设定您想要下载的宝藏(文件)的位置
- const fileUrl = url + "/" + fileName;
- // 指定要将下载的宝藏存放在何处(本地路径)
- const filePath = dowPath + "/" + fileName;
- // 创建一个能写入宝藏的空箱子(写入流)
- const fileStream = fs.createWriteStream(filePath);
- headers = getHeaders(headers, "")
- logger.info('headers:!', headers, fileUrl);
- headers["User-Agent"] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
- const options = {
- headers: headers
- };
- http.get(fileUrl, options, (response) => {
- // 将收到的宝藏(响应流)流入箱子(文件流)中
- response.pipe(fileStream);
- // 等待宝藏完全转移完毕
- fileStream.on('finish', () => {
- // 现在宝藏已经安全地放在箱子里(文件写入完成)
- fileStream.close();
- logger.info('文件下载完成,船长!');
- resolve(true)
- });
- }).on('error', (err) => {
- // 如果在转移宝藏过程中遇到海怪(错误)...
- logger.error('在下载文件时遇到了问题:', err);
- // 别忘了关闭箱子(文件流)
- fileStream.close();
- // 如果宝藏已经损坏(文件已经部分写入),丢弃它(删除文件)
- if (fileStream.bytesWritten === 0) {
- fs.unlink(filePath, (unlinkErr) => {
- if (unlinkErr) logger.error('无法删除不完整的文件:', unlinkErr);
- });
- }
- reject(err)
- });
- });
- }
- module.exports = {
- request_get,
- request_post,
- dowFile
- };
|