Node.js中的http请求客户端示例(request client)


Posted in Javascript onMay 04, 2017

Node.JS有一个request模块,可以很方便的抓取网页内容。最简单的一个示例:

var request = require('request');

request('http://www.google.com', function (error, response, body) {
 if (!error && response.statusCode == 200) {
  console.log(body);
 }
})

由上例可以看出用request发起一个http请求确实非常简单,不过唯一的问题就是,request模块的第三方依赖比较多,导致这个模块非常地大,要占用好几M的空间。

其实用node.js原生的http模块就可以很方便地写出一个类似的request的功能,只要几十行即可:

var http = require('http')
var url  = require('url')


var request = function(reqUrl, data, cb, headers) {
 var dataType = typeof data

 if (dataType == 'function') {
  headers = cb
  cb   = data
  rawData = null
 } else if (dataType == 'object') {
  rawData = JSON.stringify(data)
 } else {
  rawData = data
 }

 var urlObj = url.parse(reqUrl)

 var options = {
   hostname : urlObj.hostname
  , port   : urlObj.port
  , path   : urlObj.pathname
  , method  : rawData ? 'post' : 'get'
 }

 headers && (options.headers = headers)


 var req = http.request(options, function(res) {
  var receives = []

  if (res.statusCode !== 200) {
   cb && cb(new Error('Request Failed. Status Code: ' + res.statusCode + ' ' + reqUrl))
   return
  }

  res.on('data', function(chunk) {
   receives.push(chunk)
  })

  res.on('end', function() {
   var resData = Buffer.concat(receives).toString()
   try {
    resData = JSON.parse(resData)
   } catch (e) { }

   cb && cb(null, res, resData)
  })
 })

 req.on('error', function(e) {
  cb && cb(e)
 })

 rawData && req.write(rawData)

 req.end()
}


module.exports = request

使用接口与request模块是一样的,比如我们抓取新浪新闻首页的内容

request('http://news.sina.com.cn', function(err, res, data) {
 console.log('geted', data)
})

其次它还支持抓取时附加cookie等header认证信息,如

request('http://news.sina.com.cn', function(err, res, data) {
 console.log('get with cookie', data)
}, { cookie: '_sessionid=1234567890' })

对POST的支持

request('http://news.sina.com.cn', { postdata: 'json' }, function(err, res, data) {
 console.log('get with cookie', data)
}, { cookie: '_sessionid=1234567890' })

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 闭包疑问
Dec 30 Javascript
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
Jan 02 Javascript
js特效,页面下雪的小例子
Jun 17 Javascript
浅谈jquery回调函数callback的使用
Jan 30 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(二)之数据支持json字符串、list集合
Aug 11 Javascript
JavaScript中 ES6 generator数据类型详解
Aug 11 Javascript
微信小程序 弹幕功能简单实例
Feb 14 Javascript
浅谈ECMAScript6新特性之let、const
Aug 02 Javascript
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
Oct 19 Javascript
jQuery实现计算器功能
Oct 19 jQuery
Node.js文本文件BOM头的去除方法
Nov 22 Javascript
Vue中foreach数组与js中遍历数组的写法说明
Jun 05 Vue.js
Bootstrap布局之栅格系统学习笔记
May 04 #Javascript
vue.js开发环境搭建教程
May 04 #Javascript
jQuery使用JSONP实现跨域获取数据的三种方法详解
May 04 #jQuery
详解webpack es6 to es5支持配置
May 04 #Javascript
angular 基于ng-messages的表单验证实例
May 04 #Javascript
JS实现标签页切换效果
May 04 #Javascript
ES6下React组件的写法示例代码
May 04 #Javascript
You might like
PHP生成带有雪花背景的验证码
2006/10/09 PHP
ajax+php打造进度条 readyState各状态
2010/03/20 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
2014/06/19 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
2017/03/23 PHP
php和redis实现秒杀活动的流程
2019/07/17 PHP
基于jquery的不规则矩形的排列实现代码
2012/04/16 Javascript
js判断浏览器类型的方法
2013/08/07 Javascript
js转化毫秒为时间格式代码
2014/04/10 Javascript
JavaScript对象反射用法实例
2015/04/17 Javascript
Javascript实现的Map集合工具类完整实例
2015/07/31 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
利用jquery实现验证输入的是否是数字、小数,包含保留几位小数
2016/12/07 Javascript
Node.js中process模块常用的属性和方法
2016/12/13 Javascript
jQuery简易时光轴实现方法示例
2017/03/13 Javascript
完美实现js拖拽效果 return false用法详解
2017/07/28 Javascript
Thinkphp5微信小程序获取用户信息接口的实例详解
2017/09/26 Javascript
JS实现键值对遍历json数组功能示例
2018/05/30 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
2018/08/12 Javascript
js中int和string数据类型互相转化实例
2019/01/16 Javascript
jQuery AJAX与jQuery事件的分析讲解
2019/02/18 jQuery
Vue项目打包编译优化方案
2020/09/16 Javascript
在vant 中使用cell组件 定义图标该图片和位置操作
2020/11/02 Javascript
原生js实现自定义消息提示框
2020/11/19 Javascript
js实现移动端轮播图滑动切换
2020/12/21 Javascript
python获取当前时间对应unix时间戳的方法
2015/05/15 Python
python开发之基于thread线程搜索本地文件的方法
2015/11/11 Python
Python探索之修改Python搜索路径
2017/10/25 Python
对Python中数组的几种使用方法总结
2018/06/28 Python
Python使用requests提交HTTP表单的方法
2018/12/26 Python
python实现nao机器人手臂动作控制
2019/04/29 Python
简单了解python shutil模块原理及使用方法
2020/04/28 Python
基于python实现删除指定文件类型
2020/07/21 Python
python 输入字符串生成所有有效的IP地址(LeetCode 93号题)
2020/10/15 Python
喷漆工的岗位职责
2014/03/17 职场文书
2014年团员学习十八大思想汇报
2014/09/13 职场文书
市场部岗位职责
2015/02/12 职场文书