小程序抓包
#!/usr/bin/env node
'use strict';
var request = require('request');
const orderIds = [12321,123123];
for (let orderId of orderIds) {
var options = {
method: 'GET',
url: `http://orderver.jd.care/orderXml.txt?orderId=${orderId}&ver=0`,
encoding: null,
headers: {
'Content-Type': 'text/html;charset=UTF-8',
'Cookie': 'sso.jd.com=BJ.0134A5C56E770859978DBA2D9BCF19FF7320210831103700;'
}
};
request(options, function (error, response, body) {
if (error) throw new Error(error);
const value = Buffer.from(body,"utf8").toString();
const index = value.indexOf("greetingCardContent");
const frag = value.substr(index,50);
console.log(orderId , index, frag);
});
}
/**
Request是一个简化的http客户端,它和Python的request库很像。这个库比默认的 http模块更好用,多年来被开源社区作为开发首选。
*/
chmod a+x 1.txt
快速建包
mkdir TestProject
cd TestProject
npm init --yesnpm install request --save
var request = require('request');
request('http://www.google.com', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body); // Print the google web page.
}
});
node test.jssudo npm install -g request // If you would like to globally install。。。。。
配置NODE_PATH
环境变量.
vim ~/.bash_profile
export NODE_PATH=/usr/local/lib/node_modules
上面的程序数据大的时候会堵死网卡。。。
#!/usr/bin/env node --max-old-space-size=12096
'use strict';
/**
Request是一个简化的http客户端,它和Python的request库很像。这个库比默认的 http模块更好用,多年来被开源社区作为开发首选。
*/
var request = require('request');
const fs = require('fs');
fs.readFile('./orderIds.txt', (error, data) => {
if (error) return console.log("读取文件失败,内容是" + error.message);
let allOrderIds = data.toString()
let orderIds = allOrderIds.split(',');
let set = new Set();
orderIds.forEach(item => set.add(item))
let arr= Array.from(set)
console.log(orderIds.length, arr.length);
let index=1
for (let orderId of arr) {
index++;
setTimeout(function(){
const options = {
method: 'GET',
url: `http://10.172.154.214/cartXml.txt?orderId=${orderId}&ver=0`,
encoding: null,
headers: {
'Content-Type': 'text/html;charset=UTF-8',
'Cookie': 'sso.jd.com=BJ.0134A5C56E770859978DBA2D9BCF19FF7320210831103700;'
}
};
request(options, function (error, response, body) {
if (error) {
console.log(orderId, "error", error);
return;
}
const index = body.indexOf('14234')
if (index > -1) {
console.log(orderId , index);
fs.writeFile('./target.txt', orderId+",", { flag: 'a+' }, err => {})
}
else {
console.log(orderId , 'not match');
}
//i const value = Buffer.from(body,"utf8").toString();
// const frag = value.substr(1,50);
});
},1000*index)
}
});
西面
# 修改linux端口分配范围
net.ipv4.ip_local_port_range = 32768 60999
改成 net.ipv4.ip_local_port_range = 15000 60999
sudo sysctl -w net.ipv4.ip_local_port_range="15000 60999"
# 修改timewait状态的存在时长
sysctl net.ipv4.tcp_fin_timeout = 60
改成sysctl net.ipv4.tcp_fin_timeout = 30
sudo sysctl -w net.ipv4.tcp_fin_timeout=30
# 修改timewait最大值
net.ipv4.tcp_max_tw_buckets = 262144
改成net.ipv4.tcp_max_tw_buckets = 40000
sudo sysctl -w net.ipv4.tcp_max_tw_buckets=40000
原始方法
// http.request 请求 ,相信大家都用过。
let http = require('http');
for(let i =0;i<10;i++){
let http = require('http');
let post_data =JSON.stringify({
'txid':Math.random().toString(32).slice(2),
'dataHash':Math.random().toString(32).slice(2),
'data':Math.random().toString(32).slice(2),
'publicKey':Math.random().toString(32).slice(2),
'signature':Math.random().toString(32).slice(2),
'remark':'',
'appId':Math.random().toString(32).slice(2)
});
console.log(post_data);
let options = {
hostname:'10.10.144.30',//此处不能写协议,如 : http://,https:// 否则会报错
port:7451,
path:'/UChains/poe/poe/transaction',
method:'POST',
headers: {
'Content-Type':'application/x-www-form-urlencoded',
'Content-Length':Buffer.byteLength(post_data)
}
};
console.log('________Send__________');
let req =http.request(options,function(res){
console.log('________success_________');
console.log('STATUS:'+res.statusCode);
console.log('HEADERS:'+JSON.stringify(res.headers));
res.on('data',function(chunk){
console.log('BODY:'+chunk);
});
});
req.write(post_data);
req.end();
}
正确 Buffer拼接:
var data = "";
res.on('data', function (chunk) {
data += chunk;
})
.on("end", function () {
});
段代码在chunk都是ascii码数据或者数据量比较少时是没有问题,但如果你的数据是大量中文的话,恭喜你,中枪了,会出现乱码。其原因是两个chunk(Buffer对象)的拼接并不正常,相当于进行了buffer.toString() + buffer.toString()。如果buffer不是完整的,则toString出来后的string是存在问题的(比如一个中文字被截断)。
var chunks = [];
var size = 0;
res.on('data', function (chunk) {
chunks.push(chunk);
size += chunk.length;
});
res.on('end', function () {
var data = null;
switch(chunks.length) {
case 0: data = new Buffer(0);
break;
case 1: data = chunks[0];
break;
default:
data = new Buffer(size);
for (var i = 0, pos = 0, l = chunks.length; i < l; i++) {
var chunk = chunks[i];
chunk.copy(data, pos);
pos += chunk.length;
}
break;
}
});
request的promise化
var Promise = require('bluebird')
var request = Promise.promisify(request)
var wechat = new
stringify。
promisifyAll
--
const Promise = require('bluebird'),
fs = require('fs'),
path = require('path');
Promise.promisifyAll(fs);
fs.readFileAsync(path.join(__dirname, 'sample.txt'), 'utf-8')
.then(data => console.log(data))
.catch(err => console.error(err));
--