Got(node.js)请求 初探深浅

ApiPost-宣博文 前端 2021-04-23

经常用node的小伙伴肯定经常需要用到http库。在介绍got前,给大家看看got官方做的对比图。应该会看到自己熟悉的http库。


可以看到got对很多方面都是支持的,技术迭代也都比较新。顺带提一下我之前用的是request。(但已经不更新了)。

简单的请求我就不介绍了,大家可以自己去https://github.com/sindresorhus/got看看。

给大家看看copy即可满足大部分需求的模板。

var gotSend = require('got') //使用import也可以 import gotSend from 'got';
	let FormData = require('form-data'); //传递form使用
    try {
    	let url="http://www.apipost.cn";
    	//比较懒得 url不想输http的用这一段处理
    	if (url.substr(0, 7).toLowerCase() == "http://" 
    	|| url.substr(0, 8).toLowerCase() == "https://") {
        	url = url;
    	} else {
       		url = "http://" + url;
    	}
    	let form=new FormData()
    	form.append('my_file', fs.createReadStream('/foo/bar.jpg'));
    	form.append("a",1)
    	let options={
    		url:url,	
    		method:"POST", //请求方式 get post... 不多介绍了
    		headers:{ //需要啥传啥 我列了几个常用的,不需要删除即可
    		"cookie":"aaa=%E4%BD%A0%E5%A5%BD;yyyyy=nihao;" //请求携带的cookie 这里我是自己代码拼的,官网用的是tough-cookie 
    		"content-type": "application/json", //编码类型 不同的content-type传递方式不相同 下面传参时会介绍
    		"Origin": "http://www.apipost.cn" //请求来源 可以使用WHATWG 接口在url里获得new URL() 
    		},
    		responseType: "buffer",  //解析响应的方式默认(text) text,json,buffer 这里我使用buffer 因为buffer可以更自由的判断响应体的类型
    		followRedirect:true, //是否遵循重定向响应 默认(true)
    		timeout:25000, //请求超时时间 好像还可以比较详细的设置 需要的分细的去官网看把
    		rejectUnauthorized:true, //检测到无效的SSL证书时,引发错误.默认(true) false是忽略无效证书错误
    		//下面是携带参数了,划重点 根据不同的content-type选择一个即可
    		json:{a:1}, //application/json时使用 支持类型 object| Array | number | string | boolean | null
    		body:form,//multipart/form-data时使用 多个参数继续append即可。
    		form:{a:1}, //application/x-www-form-urlencoded时使用 类型只能是对象object
    		 // http2:true, //根据ALPN协议选择HTTP/2 默认(http 1.1) 这里我还在研究
       		 // isStream:true //返回的是Stream流 默认false 返回的是Promise http2好像要配合这个使用
    	}
         let got = gotSend(options) //如果需要取消请求,把变量在全局声明 掉用got.cancel() 就可以取消请求
         got.then(response=>{
         	//请求成功 具体业务具体判断statusCode
         	if(response.statusCode){
         		//这里就拿到response 请求的参数在response.request.options 里 很齐全
         		//响应体 response.body
         		//响应头 response.headers
         		//.....  需要什么可以打印出来看看 
         	}
         }).catch(error=>{
         //请求发生错误 
         })
    } catch (error) {
        //请求发生错误 
    }

初探暂时就这么多了,有问题欢迎留言。

Apipost 私有化火热进行中

评论