nodejs发起HTTPS请求并获取数据
2015-12-04 22:06
561 查看
在Web项目中,有时需要通过协议调取来自其他环境的数据。HTTPS是一种应用于安全数据传输的网络协议。我们都知道Ajax可以异步请求数据,但单单通过ajax无法实现跨域。采用一些其他方式需要根据不同的浏览器做相应处理,火狐,谷歌等和IE需要各自做相应判断,所以这种通过浏览器来解析数据虽然省略了数据的解压缩等处理,但是在有安全认证等情况下做跨域处理确比较困难。比如:IE的请求Header无法更改。这时通过Node请求并解析数据就显得比较简单了。如下是nodejs中通过https请求数据的全过程:
注:options,需要有请求数据的长度,options需要加上'Accept-Encoding': 'gzip, deflate',返回的数据需要判断是哪种压缩方式,然后解压缩获取到数据。gunzip的end事件里的returndatatojson即是获取的数据。
var https = require('https'); var zlib = require('zlib'); var post_data="………………";//请求数据 var reqdata = JSON.stringify(post_data); var options = { hostname: '10.225.***.***', port: '8443', path: '/data/table/list', method: 'POST', rejectUnauthorized: false, requestCert: true, auth: 'admin:123456************', headers: { 'username': 'admin', 'password': '123456************', 'Cookie': 'locale=zh_CN', 'X-BuildTime': '2015-01-01 20:04:11', 'Autologin': '4', 'Accept-Encoding': 'gzip, deflate', 'X-Timeout': '3600000', 'Content-Type': 'Application/json', "Content-Length":reqdata.length } }; var req = https.request(options, function (res) { }); req.write(reqdata); req.on('response', function (response) { switch (response.headers['content-encoding']) { case 'gzip': var body = ''; var gunzip = zlib.createGunzip(); response.pipe(gunzip); gunzip.on('data', function (data) { body += data; }); gunzip.on('end', function () { var returndatatojson= JSON.parse(body); req.end(); }); gunzip.on('error', function (e) { console.log('error' + e.toString()); req.end(); }); break; case 'deflate': var output = fs.createWriteStream("d:temp.txt"); response.pipe(zlib.createInflate()).pipe(output); req.end(); break; default:req.end(); break; } }); req.on('error', function (e) { console.log(new Error('problem with request: ' + e.message)); req.end(); setTimeout(cb, 10); });
注:options,需要有请求数据的长度,options需要加上'Accept-Encoding': 'gzip, deflate',返回的数据需要判断是哪种压缩方式,然后解压缩获取到数据。gunzip的end事件里的returndatatojson即是获取的数据。
相关文章推荐
- poj--1637--Sightseeing tour(网络流,最大流判断混合图是否存在欧拉图)
- poj--1637--Sightseeing tour(网络流,最大流判断混合图是否存在欧拉图)
- UNIX网络编程笔记(6):I/O复用之select函数
- centos下httpd-2.4的编译安装
- centos下httpd-2.4的编译安装
- 基于AFNetworking3.0的网络封装
- iOS 网络与多线程--5.异步Post方式的网络请求(非阻塞)
- Nginx实现多域名证书HTTPS
- HTTP 2.0 协议详解
- HTTPS重用Session ID与负载均衡
- 解决TCP网络传输“粘包”问题
- 第五天 网络配置和文件服务器
- java http post json
- HTTP协议的状态码
- httpsqs 轻量级消息队列
- spring mvc中设置返回的http status自定义编码
- 网络不稳定 网速忽高忽低,ping值忽高忽低的解决办法 无线网出现问题解决
- Java网络编程以及简单的聊天程序
- 从epoll构建muduo-5 加入Acceptor和TcpConnection
- Java网络编程以及简单的聊天程序