js逆向工具-nodejs服务使用

目录

      • 一、运行js文件
      • 二、引入或开放接口模块
        • 1、提供模块公开接口module.exports
        • 2、引入模块require
      • 三、GET/POST请求
        • 1、获取GET请求内容
        • 2、获取Post请求内容
      • 四、创建Web服务器/客户端
        • 1、 Node 创建 Web 服务器
        • 2、 使用 Node 创建 Web 客户端
      • 五、Express 框架
        • 1、安装express
        • 2、express简单案例
        • 3、Python使用nodejs运行js脚本

一、运行js文件

  • 新建hello.js,内容如下 ,终端运行程序 node hello.js
//hello.js文件
console.log("Hello World");
  • 推荐入门教程

二、引入或开放接口模块

  • Node.js 提供了 exportsrequire 两个对象

1、提供模块公开接口module.exports

  • exports :是模块公开的接口
  • module.exports = Hello决定了外部可以引用该模块,其接口对象就是输出的Hello对象本身
//hello.js 文件
function Hello() {
      
    var name; 
    this.setName = function(thyName) {
      
        name = thyName; 
    }; 
    this.sayHello = function() {
      
        console.log('Hello ' + name); 
    }; 
}; 
module.exports = Hello;

2、引入模块require

  • require :用于从外部获取一个模块的接口,比如用来载入 Node.js 模块或者已经exports了的本地的js文件。简单说:require 用来加载一个文件的,可加载 .js、.json 和 .node 后缀的文件
  • require('./hello') 引入了当前目录下的 hello.js 文件(./ 为当前目录,node.js 默认后缀为 js)
//server.js文件
var Hello = require('./hello'); 
hello = new Hello(); 
hello.setName('BYVoid'); 
hello.sayHello(); 

三、GET/POST请求

1、获取GET请求内容

  • 运行如下文件node server.js,并在浏览器中输入http://localhost:3000/user?name=Nodejs_learning_website&url=https://www.runoob.com/nodejs/node-js-get-post.html
  • 通过res.write()和res.end()即可了解对应的响应内容即可看到get请求对应的响应的内容
//server.js文件
var http = require('http');  //请求(require)Node.js 自带的 http 模块,并且把它赋值给 http 变量
var url = require('url');
var util = require('util');
/*  
    1、http.createServer() 方法创建服务器,并使用 isten方法指定这个 HTTP 服务器监听的端口号
    2、http.createServer() 的参数为一个匿名函数, 该匿名函数通过 req, res 参数来接收和响应数据
 */
http.createServer(function(req, res){
     
	// 定义响应头
    res.writeHead(200, {
     'Content-Type': 'text/html; charset=utf8'});
    // 解析请求的url的query参数
    var params = url.parse(req.url, true).query;
    // res.write定义响应内容
    res.write("website_name is:" + params.name);
    res.write("\n");
    res.write("website URL is:" + params.url);
    res.write("\n");
    // 响应会返回前面res.write()的内容,并最终会返回res.end()出来的内容, res.end()也可传空置
    res.end(util.inspect(url.parse(req.url, true))); //util.inspect(url.parse(req.url, true))
 
}).listen(3000);
console.log('Server running at http://127.0.0.1:3000/');

2、获取Post请求内容

  • POST 请求的内容全部的都在请求体中,http.ServerRequest 并没有一个属性内容为请求体,原因是等待请求体传输可能是一件耗时的工作。
  • 比如上传文件,而很多时候我们可能并不需要理会请求体的内容,恶意的POST请求会大大消耗服务器的资源,所以 node.js 默认是不会解析请求体的,当你需要的时候,需要手动来做。
var http = require('http');
var querystring = require('querystring');

var postHTML = 
    '菜鸟教程 Node.js 实例' +
    '' +
    '
' + '网站名:
'
+ '网站 URL:
'
+ '' + ''
+ ''; http.createServer(function (req, res) { // 定义了一个body变量,用于暂存请求体的信息 var body = ""; // 通过req的data事件监听函数,每当接受到请求体的数据,就累加到body变量中 req.on('data', function (chunk) { body += chunk;}); req.on('end', function () { // 在end事件触发后,通过querystring.parse将body变量解析为真正的POST请求格式,然后向客户端返回 body = querystring.parse(body); // 设置响应头部信息及编码 res.writeHead(200, { 'Content-Type': 'text/html; charset=utf8'}); if(body.name && body.url) { // 输出提交的数据 res.write("网站名:" + body.name); res.write("
"
); res.write("网站 URL:" + body.url); } else { // 输出表单 res.write(postHTML); } res.end(); }); }).listen(3000); console.log('Server running at http://127.0.0.1:3000/');

四、创建Web服务器/客户端

  • Node.js 提供了 http 模块,http 模块主要用于搭建 HTTP 服务端和客户端,使用 HTTP 服务器或客户端功能必须调用 http 模块
  • Client - 客户端,一般指浏览器,浏览器可以通过 HTTP 协议向服务器请求数据
  • Server - 服务端,一般指 Web 服务器,可以接收客户端请求,并向客户端发送响应数据

1、 Node 创建 Web 服务器

  • 新建server.js文件如下
// server.js
var http = require('http');
var fs = require('fs');
var url = require('url');
 
 
// 创建服务器
http.createServer( function (request, response) {
       
   // 解析请求,包括文件名
   var pathname = url.parse(request.url).pathname;
   // 输出请求的文件名
   console.log("Request for " + pathname + " received.");
   
   // 从文件系统中读取请求的文件内容
   fs.readFile(pathname.substr(1), function (err, data) {
     
      if (err) {
     
         console.log(err);
         // HTTP 状态码: 404 : NOT FOUND  Content Type: text/html
         response.writeHead(404, {
     'Content-Type': 'text/html'});
      }else{
                  
         //  HTTP 状态码: 200 : OK Content Type: text/html
         response.writeHead(200, {
     'Content-Type': 'text/html'});    
         // 响应文件内容
         response.write(data.toString());        
      }
      //  发送响应数据
      response.end();
   });   
}).listen(8080);
 
// 控制台会输出以下信息
console.log('Server running at http://127.0.0.1:8080/');
  • 在相同目录下新建index.html 文件
DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>教程(oob.com)title>
head>
<body>
    <h1>我的第一个标题h1>
    <p>我的第一个段落。p>
body>
html>
  • 运行server.js文件,在浏览器输入http://127.0.0.1:8080/index.html , 即可看到index.html返回的内容
    在这里插入图片描述

2、 使用 Node 创建 Web 客户端

  • 新建client.js如下,前提:前面服务端sever.js正在运行,且浏览器已输入http://127.0.0.1:8080/index.html;新开窗口运行client.js则会打印出服务端index.html的源代码;
  • 额,我觉得该脚本更像一个爬虫程序~,请求数据,然后获得源代码响应
// client.js
var http = require('http');
 
// 用于请求的选项
var options = {
     
   host: 'localhost',
   port: '8080',
   path: '/index.html'  
};
// 处理响应的回调函数
var callback = function(response){
     
   // 不断更新数据
   var body = '';
   response.on('data', function(data) {
     body += data;});
   response.on('end', function() {
     console.log(body);  // 数据接收完成});
}
// 向服务端发送请求
var req = http.request(options, callback);
req.end();

五、Express 框架

  • Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具
  • 使用 Express 可以快速地搭建一个完整功能的网站
  • Express 框架核心特性:可以设置中间件来响应 HTTP 请求,定义了路由表用于执行不同的 HTTP 请求动作, 可以通过向模板传递参数来动态渲染 HTML 页面
  • Express框架学习

1、安装express

  • body-parser :node.js 中间件,用于处理 JSON, Raw, Text 和 URL 编码的数据
  • cookie-parser:这就是一个解析Cookie的工具。通过req.cookies可以取到传过来的cookie,并把它们转成对象
  • multer:node.js 中间件,用于处理 enctype=“multipart/form-data”(设置表单的MIME编码)的表单数据
  • npm list express最终能看到express框架的版本
npm init -f
npm install express --save
npm install body-parser --save
npm install cookie-parser --save
npm install multer --save
npm list express

2、express简单案例

  • 主要使用的路由规则是get和post两种
  • 以下脚本生成一个 express 实例 app,挂载了一个根路由控制器,然后监听 8082端口并启动程序,可看到对应输出
  • 代码注解:访问根路径时,依然返回Hello Get ;访问路径:name占位符;以及访问正则匹配的路径
//express_demo.js 文件
var express = require('express');
var app = express();
/*
   访问根路径时,依然返回Hello Get
   当访问如http://127.0.0.1:8082/users/nbdh路径时,返回 hello, nbdh
   路径中 :name 起了占位符的作用,这个占位符的名字是 name,可以通过 req.params.name 取到实际的值
 */

// 访问 http://127.0.0.1:8082/
app.get('/', function (req, res) {
     
   res.send('Hello Get');
})
// 访问 http://127.0.0.1:8082/users/nbdh 页面 GET 请求
app.get('/users/:name', function (req, res) {
     
   res.send('hello, ' + req.params.name)
})
// 对页面 http://127.0.0.1:8082/name=abx123cd等响应 GET 请求
app.get('/name=ab*cd', function(req, res) {
        
   console.log(req.params)
   res.send('正则匹配');
})
// post请求
app.post('/', function (req, res) {
     
   res.send('Hello POST');
})

//监听8082端口
var server = app.listen(8082);

3、Python使用nodejs运行js脚本

  • 第一步:在当前目录下创建LJ.js文件,该文件是逆向扣出来的js脚本,关键代码如下,一定要提供导出模块接口module.exports = req,调用该js文件需要传入两个参数lat_lng, num ,最后返回get_max_min函数的结果
req = function(lat_lng, num){
     
    c = Wa(lat_lng);
    // console.log(get_max_min(c, num))
    return get_max_min(c, num)
}
module.exports = req
  • 第二步:在同一目录下创建LJserver.js文件如下,运行该文件,在浏览器输入http://127.0.0.1:8082/get_LJ_latlng?lng=120.5811424828&lat=31.3010678543&Se=inner&num=12 ,即可返回上面LJ.js的结果; 这其实就是浏览器请求数据,nodejs的服务作为响应返回了结果这么一个过程;
//LJserver.js文件
var Ljresp = require('./LJ.js')
// express应用
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
     extended: true}));

// lat_lng的js文件请求: http://127.0.0.1:8082/get_LJ_latlng?lng=120.5811424828&lat=31.3010678543&Se=inner&num=12
app.get("/get_LJ_latlng",function(req,res){
     
   var lat_lng = {
     
      "lng": req.query.lng,
      "lat":req.query.lat,
      "Se": "inner"
   };
   res.send(Ljresp(lat_lng, req.query.num));
});

//监听8082端口
const server = app.listen(8082);
  • 第三步:Python脚本请求js服务的结果,前面的LJserver.js在运行状态下
import requests
from urllib.parse import urlencode

lat_lng = {
     
    "lng": 120.5811424828,
    "lat": 31.3010678543,
    "Se": "inner",
    "num": 12
}
url = f"http://127.0.0.1:8082/get_LJ_latlng?{
       urlencode(lat_lng)}"
print(url)
resp = requests.get(url, timeout=10)
print(resp.json())

# 最终输出结果如下
# http://127.0.0.1:8082/get_LJ_latlng?lng=120.5811424828&lat=31.3010678543&Se=inner&num=12
# {'maxLatitude': 31.532069843198276, 'minLatitude': 31.069492306296034, 'maxLongitude': 120.91171891047182, 'minLongitude': 120.25056605512805}

你可能感兴趣的:(SpiderCrawl,node.js,javascript)