使用nodejs请求可以达到很多javascript请求达不到的目的,所以总结了几个请求,包括:原生 http,request,axios,flyio。
request
nodejs的常用模块,我这里只写了一个结构,并没有分开说细节,但是一般要用到的这里都有啦!要是大神们有什么补充,我也是万分感谢呀!
var request = require('request');
//需要传递的参数
const data = {
'key1': 'value1',
'key2': 'value2',
'key3': 'value3',
'keyn': 'value4',
}
//json格式转换
function obj2String(obj, arr = [], idx = 0) {
for (let item in obj) {
arr[idx++] = [item, obj[item]]
}
return new URLSearchParams(arr).toString()
}
var options = {
url: 'url',//请求的URL
method: "POST",//or GET 请求方式
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Referer': 'XXXX'
},
/*
这里需要转换主要是因为
写了 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
如果写 'body: JSON.stringify(data)',那么'Content-Type'应该为'application/json',
后面的例子是第二种方式
*/
body: obj2String(data)
};
function callback(error, response, body) {
console.log(response.statusCode);
if (!error && response.statusCode == 200) {
var info = JSON.parse(body);//2 json
console.log(info.output);
}
}
request(options, callback);
原生 http
const http = require("http");
const options = {
host: "url", //此处不能写协议(https://),否则会报错
port: 80,
path: "/XXX",//路由
method: "POST",//or GET
headers: {//根据需要写
"Content-Type": "application/json",
"Referer": "XXX"
}
};
// const data = `key1=value1&key2=value2`;
const data = {
'key1': 'value1',
'key2': 'value2',
'key3': 'value3',
'keyn': 'valuen',
}
const req = http.request(options, function(res) {
res.setEncoding("utf8");
const chunks = [];
res.on("data", chunk => {
chunks.push(chunk);
});
res.on("end", () => {
console.log(chunks);
});
});
req.on("error", function(e) {
console.log("problem with request: " + e.message);
});
req.write(JSON.stringify(data));
req.end();
axios
Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。
var axios = require("axios");//使用之前需要npm install axios
const data = {
'key1': 'value1',
'key2': 'value2',
'key3': 'value3',
'keyn': 'valuen',
}
axios({
method: "post",//or get
url: "url",
headers: {
"Content-Type": "application/json",
"Referer": "XXXX"
},
data: JSON.stringify(data)
})
.then(function(response) {
console.log(response.data);
})
.catch(function(error) {
console.log(2222222);
});
flyio
一个支持所有JavaScript运行环境的基于Promise的、支持请求转发、强大的http请求库。可以让您在多个端上尽可能大限度的实现代码复用。
目前Fly.js支持的平台包括:Node.js 、微信小程序 、Weex 、React Native 、Quick App 和浏览器,这些平台的 JavaScript 运行时都是不同的
文档地址:https://wendux.github.io/dist/#/doc/flyio/readme
在浏览器环境下,一个库的大小是非常重要的。这方面 Fly 做的很好,它在保持强大的功能的同时,将自己的身材控制到了最好。min 只有 4.6K 左右,GZIP 压缩后不到 2K,体积是 axios 的四分之一。
//别忘了安装 npm install flyio
const fly=require("flyio")
const data = {
'key1': 'value1',
'key2': 'value2',
'key3': 'value3',
'keyn': 'valuen',
}
fly.post(url, JSON.stringify(data), {headers:{
"Content-Type": "application/json",
"Referer": "XXXXXX"
}})
.then(function (response) {
console.log(response.data);
})
.catch(function (error) {
console.log(error);
});
以上是这四种方法的简单使用,关于类似的用法还希望大家补充!
网友评论