js逆向工具-nodejs服务使用

2023-11-11

一、运行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 = 
    '<html><head><meta charset="utf-8"><title>菜鸟教程 Node.js 实例</title></head>' +
    '<body>' +
    '<form method="post">' +
    '网站名: <input name="name"><br>' +
    '网站 URL: <input name="url"><br>' +
    '<input type="submit">' +
    '</form>' +
    '</body></html>';

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("<br>");
            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}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

js逆向工具-nodejs服务使用 的相关文章

  • Javascript Promise“then”始终运行,即使 Promise 未能执行

    我希望当调用第二个 then 时不执行第三个 then 但是 即使 Promise 被拒绝 调用第二个 then 并且代码返回 rejected 然后返回 undefined 它仍然调用第三个 then 如何不运行第三个 then 这样 未
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 如何修改每个JSON对象javascript

    我想修改里面的每个 JSON 值cooldown object cooldown user 1 This user2 0 This 在 Javascript 中使用 for 语句 我研究了好几个小时 只找到了内部的 blocks Edit
  • IE从哪个版本开始支持Object.create(null)?

    您可以通过多种方式在 JavaScript 中创建对象 creates an object which makes the Object prototype of data var data1 new Object Object liter
  • 在新的 Google 协作平台 <嵌入 HTML> 中使用 localStorage 和 IndexedDB 不起作用

    我正在尝试将新的 Google 协作平台用于我开发的网页 但是 我在存储本地数据时遇到了问题 本地文件在 Windows 和 Apple safari chrome 中运行良好 从 Google 协作平台尝试一下 没有什么乐趣 此外 在 s
  • 如何在react-bootstrap中禁用表单提交的

    在下面的代码片段中 我有许多文本类型的输入表单 如果用户点击 我似乎会得到相同的合成事件 就像他们按下提交按钮一样 我想忽略作为表单提交 只允许一个人按下 提交 按钮 我删除了一些表单组以减少示例 在所有情况下 按钮或 ENTER 键 e
  • 如何将内联 JavaScript 与 Express/Node.js 中动态生成的内容分开?

    对于具有几年 Web 开发经验但没有找到答案的人来说 这是一个有点菜鸟的问题程序员堆栈交换 or Google 我决定在这里问一下 我在用Express网络框架Node js 但这个问题并不特定于任何 Web 框架或编程语言 以下是从数据库
  • 如何纠正流警告:解构(缺少注释)

    我正在编写一个小型 React Native 应用程序 并且正在尝试使用 Flow 但我无法在任何地方真正获得有关它的正确教程 我不断收到错误 destructuring Missing annotation 有关 station 这段代码
  • 将 GMT 时间转换为当地时间

    我以这种格式从我的服务器获取 GMT 时间 Fri 18 Oct 2013 11 38 23 GMT 我的要求是使用Javascript将此时间转换为本地时间 例如 如果用户来自印度 首先我需要采用时区 5 30并将其添加到我的服务器时间并
  • window.location 和 location.href 之间的区别

    我对之间的区别感到困惑window location and location href 两者似乎都以相同的方式行事 有什么不同 window location是一个对象 它保存有关当前文档位置的所有信息 主机 href 端口 协议等 lo
  • 有没有办法在 onclick 触发时禁用 iPad/iPhone 上的闪烁/闪烁?

    所以我有一个有 onclick 事件的区域 在常规浏览器上单击时 它不会显示任何视觉变化 但在 iPad iPhone 上单击时 它会闪烁 闪烁 有什么办法可以阻止它在 iPad iPhone 上执行此操作吗 这是一个与我正在做的类似的示例
  • 在移动设备上滚动

    这个问题更多的是一个建议研究 我确实希望它对其他人有帮助 并且它不会关闭 因为我不太确定在哪里寻求有关此事的建议 在过去的 6 个月里 我一直在进行移动开发 我有机会处理各种设备上的各种情况和错误 最麻烦的是滚动问题 当涉及到在网站的多个区
  • 如何隐藏/禁用 Highcharts.js 中的图例框?

    我想问是否可以使用 HighCharts js 库隐藏图表中的所有图例框 var chart object chart renderTo render to type graph type colors graph colors title
  • 使用 postgres 和 node js 在单个语句中执行多个查询

    我需要在像这样的单个语句中执行插入和删除查询 INSERT INTO COMPANY ID NAME VALUES 1 Paul DELETE FROM COMPANY WHERE ID 12 这是我用于执行查询的 node js 代码 p
  • Javascript - 水波纹效果

    我需要 JS 上的脚本 它将以 水波纹 样式更改 images html 抱歉 6MB GIF 文件 http fcuunited ru temp listening2 gif http fcunited ru temp listening
  • 使用 Mongoose 无法找到按 ObjectId 搜索的文档

    Campaign find client id req param client id error campaigns gt if error response error error message else for campaign i
  • 用于交互式图形绘制的轻量级 JavaScript 库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有兴趣了解用于绘制交互式图表的最轻量级 javascript 库 我掌握的数据主要是与海洋研究相关的科学数据 我知道一些 jquery
  • 从 FileReader 设置背景图像样式

    我正在寻找一种解决方案 允许我从文件上传输入中获取文件并通过设置 document body style backgroundImage 来预览它 以下代码用于在 Image 元素中显示预览 function setImage id tar
  • JavaScript 相对路径

    在第一个 html 文件中 我使用了一个变量类别链接 var categoryLinks Career prospects http localhost Landa DirectManagers 511 HelenaChechik Dim0
  • Jquery - 选择选项后如何获取选项的特定数据类型?

    我将直接跳到标记 然后解释我想要做什么 HTML 选择选项

随机推荐

  • vue中如何设置鼠标经过切换样式

    vue中如何设置鼠标经过切换样式 第一步 在需要设置样式的标签上加上mouseover和mouseout属性 代码如下 p class content p 可以替换为v on 不影响使用 这里p标签的样式是 content p event是
  • 12. 直流电机调速(PWM)

    直流电机介绍 直流电机是一种将电能转换为机械能的装置 一般的直流电机有两个电极 当电极正接时 电机正转 当电极反接时 电机反转 直流电机主要由永磁体 定子 线圈 转子 和换向器组成 除直流电机外 常见的电机还有步进电机 舵机 无刷电机 空心
  • IntelliJ IDEA开发工具详细安装步骤

    http blog csdn net haishu zheng article details 50265371
  • VSCode配置C/C++语言环境(2023版)

    基本步骤 下载并安装VSCode vscode下载地址https code visualstudio com 不会安装vscode的看下方博客 超详细VSCode安装教程 Windows 索儿呀的博客 CSDN博客 安装C 插件 安装编译器
  • ISO感光度

    数码相机的ISO是通过调整感光器件的灵敏度或者合并感光点来实现的 早在胶片时代我们的摄影生活就默默遵循这一行业标准 购买胶卷时包装上都会标示ISO 100 ISO 200 ISO400这样的字样 此处的ISO数值越大 表示胶卷的感光速度越快
  • c语言程序设计函数题,C语言程序设计函数练习题及参考答案

    C语言程序设计函数练习题及参考答案 由会员分享 可在线阅读 更多相关 C语言程序设计函数练习题及参考答案 60页珍藏版 请在人人文库网上搜索 1 C语言程序设计练习题及参考答案 1 定义一个函数int fun int a int b int
  • 二本机械毕业2年,从外包ETL到大厂数据开发,月薪13K到年薪40W

    点击上方 大数据肌肉猿 关注 星标一起成长 后台回复 加群 进入高质量学习交流群 2021年大数据肌肉猿公众号奖励制度 今天分享的是学习群的一位同学的求职经历 他二本机械专业毕业2年 毕业后培训了一段时间找了份11K的外包 两年涨到了13K
  • LC振荡器设计

    设计要求 设计出振荡频率为10GHZ的LC振荡器 如有侵权即删 一 设计步骤 1 选取LC振荡回路的值 f L 5 经验公式 可能会根据工艺的不同而变化 可以提前测试 f 10GHZ 得到选取的L值为0 5nH 寄生电阻设置为50m 注意
  • docker和k8s面试题总结(未完待续)

    6 容器类面试题 6 1 docker有几种网络模式 容器和容器之间怎么通信 主机和主机之间怎么通信 docker 有四种网络模式 none 桥接 默认模式 Host container 容器之间通过桥接模式进行通信 跨主机的容器之间通过静
  • easypoi基本使用-Excel数据的导入导出

    1 为什么要用easypoi 实现excel表格的导入导出 基于模板的导出 easypoi简化poi的操作 让人更加快速上手使用 2 easypoi使用 引入依赖
  • Git-gitignore规则之“感叹号“的用法坑点

    本文只讲一个知识点 开头的模式标识否定 该文件将会再次被包含 如果排除了该文件的父级目录 则使用 也不会再次被包含 以下面的例子进行说明 目标是要保留文件夹1中所有各层文件夹中的c文件 其他都不要 文件夹1 test c一个文件 文件夹1
  • 文件——统计成绩

    从键盘输入以下10 个学生的学号 姓名 以及数学 语文和英语成绩 写到文本文件f3 txt 中 再从文件中取出数据 计算每个学生的总成绩和平均分 并将结果显示在屏幕上 程序 include
  • vscode开启鼠标滚轮缩放字体大小设置

    打开首选项 进入设置 搜索zoom 给滚轮缩放字体选项打上钩 完成
  • Flutter实战篇(1):使用第三方极光认证一键登录

    Flutter实战篇 1 使用第三方极光认证一键登录 需求场景 在项目中有时会碰到需要手机号一键登录的需求 那么我们可以利用第三方极光平台的认证模块进行集成 实操Let s Go 首先导入第三方官方插件 jverify jverify 2
  • LaTex排版技巧:[15]公式太长如何换行?

    https jingyan baidu com article d7130635045b2013fcf47543 html LaTeX作为一个功能强大国际通用的排版软件 它特别适合于数理科学中科技论文 专业书籍排版 LaTeX尤其适合于各种
  • Python案例分析:使用LightGBM算法、随机森林、五折交叉验证进行分类预测

    1 数据导入 import pandas as pd import numpy as np import warnings from imblearn import under sampling over sampling from imb
  • 【计算机毕业设计】redis的电商秒杀系统

    redis的电商秒杀系统 开发语言 Java 框架 springcloud JDK版本 JDK1 8 服务器 tomcat7 数据库 mysql 5 7 一定要5 7版本 数据库工具 Navicat11 开发软件 eclipse myecl
  • MySQL中limit对于order by的优化

    一 无limit的场景对于order by如何优化 考虑无limit的order by语句 下面假设age是一个普通索引 1 1 查询无覆盖索引 select from emp order by age 此句中 查询的字段和order by
  • slf4j如何进行logback配置呢?

    转自 slf4j如何进行logback配置呢 slf4j简介 slf4j simple logging facade for java的缩写 翻译为java的简单日志外观 slf4j是一个开源项目 它提供我们一个一致的API来使用不同的日志
  • js逆向工具-nodejs服务使用

    目录 一 运行js文件 二 引入或开放接口模块 1 提供模块公开接口module exports 2 引入模块require 三 GET POST请求 1 获取GET请求内容 2 获取Post请求内容 四 创建Web服务器 客户端 1 No