nodejs篇之数据的转接

本文介绍如何利用Node.js实现从第三方网站请求数据并保存至本地服务器,以及如何通过修改特定网站的数据实现非恶意操作。以豆瓣API为例演示了如何获取电影数据,并通过代码展示了如何使用Node.js对扣丁学堂的评论进行修改。注意处理高并发请求避免对源站造成压力。

本篇主要讲到两个方向,一个是通过其他网站接口请求数据到自己的服务器,供自己的网站访问,属于https-request---get请求。另一个是修改别人网站的数据信息,当然是非恶意攻击的。

一、以豆瓣api为例,从其上请求数据到本地服务器

首先,进入该网址豆瓣api 快速入门,找到豆瓣Api  v2(测试版),用法上面都有教,有例子。比如说,拿到其中一个接口:/v2/movie/in_theaters,

//rq.js
const https = require('https');
const http = require("http");

//从node官网的https里面找到这个用法
const options = {
  hostname: 'api.douban.com',
  port: 443,
  path: '/v2/movie/in_theaters',
  method: 'GET'
};

var str = "";
var arr = [];
//开始请求
const req = https.request(options, (res) => {

	  res.on('data', (d) => {
//	     console.log(d.toString())
	    str +=d;
	  });
	  
	  res.on('end',()=>{
	  	var list=JSON.parse(str).subjects
//	  	   console.log(list)
			list.map(function(item){
                          //从豆瓣api得到的数据
				arr.push(item.title)
			})	
	  })
});

http.createServer((req,res)=>{
	res.writeHead(200,{"content-type":"text/html;charset=utf-8","Access-Control-Allow-Origin":"*"})
	
	if(req.url!="/favicon.ico"){
		res.write(JSON.stringify(arr));
		res.end()
	}

}).listen(3000)


//请求错误
req.on('error', (e) => {
   console.error(e);
});

//结束请求
req.end();

接下来,就是自己网站下面页面对自己服务器的访问,当然就可以请求得到从豆瓣上得到保存在本地服务器上面的数据

//demo.html
<body>
		<button>请求数据</button>
		<ul></ul>
	</body>
	<script type="text/javascript">
		$("button").click(function(){
			$.ajax({
				type:"get",
				url:"http://localhost:3000/",
				dataType:"json",
				success:function(data){
					console.log(data)
					data.map(function(item){
						$("ul").append("<li>"+item+"</li>")
					})
				}
			});
		})
</script>

正常情况下,开启服务器就可以请求到数据并做一个展示,但是,一旦请求人数太多,豆瓣服务器会崩掉,就会访问不到数据。

注:https的请求端口是443,options需要配置头部信息。上面用到的Node 参考文档奉上。

二、拿扣丁学堂为例,来用node改写一个评论的操作

首先从node官网的http模块得到提交、还有配置、写入数据的一些代码,然后登录扣丁学堂,找到一个免费视频,清空network,然后暂停视频,做一个评论,从network里面的question文件里面得到请求头信息,然后修改配置的头信息。之后找到该条评论的数据信息,修改自己的提交数据信息,最后通过node kouding来执行就可以刷多条评论了。下面是代码:

//kouding.js
const http = require('http');
var querystring = require("querystring");

//提交的数据
const postData = querystring.stringify({
  	'question[title]': 'null',
	'question[content]': '<p>讲的真是太好了,双击666</p>',
	'question[courseId]': 266,
	'question[lessonId]': 3098,
	'_csrf_token': 'd44f7c8b1b35f7279d246b852072c07c1fd67cf5'
});

//配置
const options = {
  hostname: 'www.codingke.com',
  port: 80,
  path: '/ajax/create/course/question',
  method: 'POST',
  headers: {
  	'Accept': 'application/json, text/javascript, */*; q=0.01',
	'Accept-Encoding': 'gzip, deflate',
	'Accept-Language': 'zh-CN,zh;q=0.9',
	'Connection': 'keep-alive',
	'Content-Length': postData.length,
	'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
	'Cookie': 'UM_distinctid=16512851a43d4-0294e680e38f06-54143315-fa000-16512851a442b2; Hm_lvt_7d5fe787f1dd300413ad4b53656dc0b1=1533614043; 53gid2=10444406890007; 53gid0=10444406890007; 53gid1=10444406890007; 53revisit=1533614044281; 53kf_72165667_from_host=www.codingke.com; 53kf_72165667_land_page=http%253A%252F%252Fwww.codingke.com%252F; kf_72165667_land_page_ok=1; 53uvid=1; onliner_zdfq72165667=0; test=7; visitor_type=old; 53kf_72165667_keyword=http%3A%2F%2Fwww.codingke.com%2Fpassword%2Freset%2Freset-mobile%2Fupdate; Invite_code=328782; tgw_l7_route=ba4a4fa767ccc5ac6060ead23a114820; CNZZDATA1256018185=1098351370-1533611369-%7C1533616816; PHPSESSID=56vhco8ubuii0o5rm2cmlcevu5; Hm_lpvt_7d5fe787f1dd300413ad4b53656dc0b1=1533618962',
	'Host': 'www.codingke.com',
	'Origin': 'http://www.codingke.com',
	'Referer': 'http://www.codingke.com/v/266-course',
	'User-Agent':' Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.33 Safari/537.36',
	'X-CSRF-Token': 'd44f7c8b1b35f7279d246b852072c07c1fd67cf5',
	'X-Requested-With': 'XMLHttpRequest'
  }
};

const req = http.request(options, (res) => {

  res.setEncoding('utf8');
  res.on('data', (chunk) => {
//  console.log(`BODY: ${chunk}`);
  });
  res.on('end', () => {
//  console.log('No more data in response.');
  });
});

req.on('error', (e) => {
  console.error(`problem with request: ${e.message}`);
});

//写入数据到网络
req.write(postData);
req.end();

需要注意的是,在写下一条评论之后,不要刷新页面,因为刷新页面,请求信息都会再次更改,配置的信息不起作用了。

这个属于http-request---post请求,http的请求端口是80

以上就是node中数据转接的两种方式,欢迎指教。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值