UNPKG

fa-comm

Version:
322 lines (311 loc) 10.3 kB
require('./proto'); const req = require('request'); const verify = require('./verify'); const querystring = require('querystring'); const iconv = require('iconv-lite'); const cheerio = require('cheerio'); const convert = require('./convert'); const charset = require('superagent-charset'); const superagent = require('superagent'); charset(superagent); /** * POST Form * @deprecated 已废弃req对象,建议使用request对象 * @param {*} url * @param {*} form */ exports.postForm = (url, form, options) => { return new Promise(function (resolve, reject) { options = options || {}; let formData = querystring.stringify(form); let contentLength = formData.length; //请求头 options.headers = options.headers || {}; if (!options.headers['Content-Length']) { options.headers['Content-Length'] = contentLength; } options.headers['Content-Type'] = options.headers['Content-Type'] || 'application/x-www-form-urlencoded; encoding=utf-8'; req({ headers: options.headers, uri: url, body: formData, method: 'POST' }, function (err, res, body) { if (err) { reject(err); } else { resolve(body); } }); }); }; /** * POST body * @deprecated 已废弃req对象,建议使用request对象 * @param {String} url * @param {*} body */ exports.post = (url, body, options) => { return new Promise(function (resolve, reject) { options = options || {}; const _body = body ? convert.toString(body) : ""; let contentLength = _body.getByteLength; //请求头 options.headers = options.headers || {}; if (!options.headers['Content-Length']) { options.headers['Content-Length'] = contentLength; } if (options.headers['Content-Type']) { options.headers['Content-Type'] = options.headers['Content-Type']; } else { if (verify.isJsonOrJsonArray(body)) { options.headers['Content-Type'] = 'application/json;encoding=utf-8'; } else { options.headers['Content-Type'] = 'application/x-www-form-urlencoded;encoding=utf-8'; } } // options.headers['Content-Type'] = options.headers['Content-Type'] || 'application/x-www-form-urlencoded; encoding=utf-8'; req({ headers: options.headers, uri: url, body: _body, method: 'POST' }, function (err, res, body) { if (err) { reject(err); } else { resolve(body); } }); }); }; /** * 发送HTTP请求 * @deprecated 已废弃req对象,建议使用request对象 * @param {JSON} options headers,data, * @returns */ exports.request = (options) => { return new Promise(function (resolve, reject) { //请求头 options.headers = options.headers || {}; if (options.headers['Content-Type']) { options.headers['Content-Type'] = options.headers['Content-Type']; } else { if (verify.isJsonOrJsonArray(options.body || (options.data || ''))) { options.headers['Content-Type'] = 'application/json;encoding=utf-8'; } else { options.headers['Content-Type'] = 'application/x-www-form-urlencoded;encoding=utf-8'; } } //请求参数 options.data = convert.toString(options.data || ''); options.body = convert.toString(options.body || ''); options.body = options.body || options.data; if (!options.headers['Content-Length']) { options.headers['Content-Length'] = options.body.getByteLength(); } //其他参数默认值 options.method = options.method || (options.type || 'GET'); options.uri = options.url || (options.uri || 'http://'); //发送请求 req(options, function (err, response, body) { if (err) { reject(err); } else { resolve(response); } }); }); }; /** * 发送GET请求 * @deprecated 已废弃req对象,建议使用request对象 * @param {*} url 请求地址 * @returns */ exports.requesturl = (url) => { return new Promise(function (resolve, reject) { req({ url: url, method: 'get', headers: {}, timeout: 10000 }, function (err, response, body) { if (err) { resolve(); } else { resolve(body); } }); }); }; // /** // * 发送微信POST请求 // * @param {*} path 微信api接口路由地址 // * @param {*} data 数据 // * @returns // */ // exports.wechatPost = (path, data) => { // return new Promise(function (resolve, reject) { // const https = require('https'); // const opt = { // host: 'api.weixin.qq.com', // port: 443, // path: path, // method: 'POST', // headers: { // 'Content-Length': Buffer.from(JSON.stringify(data)).length // } // }; // var _req = https.request(opt, function (_res) { // if (_res.statusCode == 200) { // let body = ''; // _res.setEncoding('utf8'); // _res.on('data', function (chunk) { // body += chunk; // }); // _res.on('end', function (chunk) { // resolve(body); // }); // _res.on('error', function (e) { // console.error(e); // resolve(); // }); // } else { // console.warn(`statusCode is not 200,${_res.statusCode.toString()}`); // resolve(); // } // }); // // 将参数发出 // _req.write(JSON.stringify(data) + "\n"); // _req.end(); // }); // }; /** * 获取地址栏参数 * @deprecated 已废弃req对象,建议使用url对象 * @param {*} name 参数名称 * @param {*} url 地址 默认window.location.search * @returns */ function getUrlParams(name, url) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); if (!url) { if (window && window.location && window.location.search) { url = window.location.search; } else { url = ''; } } var r = url.substr(url.indexOf("?") + 1).match(reg); if (r != null) return decodeURI(r[2]); return ""; } exports.getUrlParams = getUrlParams; /** * 获取query参数 * @deprecated 已废弃req对象,建议使用url对象 * @param {*} url * @returns */ function getQuery(url) { url = decodeURIComponent(url || ''); url = url.split('&'); let query = {}; for (let _url of url) { let _u = _url.split('='); _u[0] && (query[_u[0]] = _u[1]); } return query; } exports.getQuery = getQuery; /** * 获取网站源码 * @deprecated 已废弃req对象,建议使用request对象 * @param {*} url 网站地址 * @returns */ exports.getHtml = (url) => { return new Promise(function (resolve, reject) { req.get({ url }, function (err, response, body) { if (err) { console.log('ERROR!!!!!!!!!!!!'); reject(err); } else { try { console.log('[OK]'); resolve(body); } catch (e) { console.log('[ERROR]!!!!!!!!!!!!'); reject(e); } } }); }); } /** * 获取网站源码并转换成Jquery * @deprecated 已废弃req对象,建议使用request对象 * @param {*} url 网站地址 * @param {string} [encoding='utf-8'] 编码 * @returns */ exports.getHtmlByJquery = (url, encoding = 'utf-8') => { return new Promise(function (resolve, reject) { req.get({ url, encoding: null }, function (err, response, body) { if (err) { reject(err); } else { try { const buf = iconv.decode(body, encoding); const $ = cheerio.load(buf); resolve($); } catch (e) { reject(e); } } }); }); } /** * 获取网站源码并转换成Jquery * @deprecated 已废弃req对象,建议使用convert对象 * @param {*} url 网站地址 * @param {Form} form 表单内容 * @param {JSON} options 指定headers等信息 * @param {string} [encoding='utf-8'] 编码 * @returns */ exports.getHtmlPostFormByJquery = (url, form, options, encoding) => { return new Promise(function (resolve, reject) { options = options || {}; let formData = querystring.stringify(form); let contentLength = formData.length; //请求头 options.headers = options.headers || {}; if (!options.headers['Content-Length']) { options.headers['Content-Length'] = contentLength; } options.headers['Content-Type'] = options.headers['Content-Type'] || 'application/x-www-form-urlencoded; encoding=utf-8'; req({ headers: options.headers, uri: url, body: formData, method: 'POST' }, function (err, res, body) { if (err) { reject(err); } else { try { const buf = iconv.decode(body, encoding || 'utf-8'); const $ = cheerio.load(buf); resolve($); } catch (e) { reject(e); } } }); }); }; exports.superagent = superagent;