本篇主要讲到两个方向,一个是通过其他网站接口请求数据到自己的服务器,供自己的网站访问,属于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中数据转接的两种方式,欢迎指教。
本文介绍如何利用Node.js实现从第三方网站请求数据并保存至本地服务器,以及如何通过修改特定网站的数据实现非恶意操作。以豆瓣API为例演示了如何获取电影数据,并通过代码展示了如何使用Node.js对扣丁学堂的评论进行修改。注意处理高并发请求避免对源站造成压力。
545

被折叠的 条评论
为什么被折叠?



