使用node发送请求没有同源限制
1.使用fiddler抓取需要发送的请求的包的信息
2.使用node做服务,获取传送的信息
var http=require("http");
var fs=require("fs");
var cheerio=require("cheerio");
const request = require('request')
const express=require('express')
const app=new express();
var time=new Date().getTime();
var cookie=""
var code=""
//保存网络图片
var imageUrl=`http://xg.swpu.edu.cn/SPCP/Web/Account/GetLoginVCode?dt=${time}.jpg`
function saveImage(imageUrl){
return new Promise(function(resolve,reject){
http.get(imageUrl, function (res) {
res.setEncoding('binary'); //二进制(binary)
var imageData ='';
res.on('data',function(data){ //图片加载到内存变量
imageData += data;
}).on('end',function(){ //加载完毕保存图片
if(!fs.existsSync("E:/项目/daka/images")){
fs.mkdirSync("E:/项目/daka/images");
}
fs.writeFile(`E:/项目/daka/images/test.jpg`,imageData,'binary',function (err) { //以二进制格式保存
if(err) throw err;
//console.log('保存成功');
});
});
});
resolve();
})
}
async function qingqiu()
{
//return new Promise(function(resolve,reject){
await saveImage(imageUrl);
setTimeout(function(){
const axios = require('axios').default;
const apiUrl = 'http://api.ttshitu.com/base64';//要使用点选请将地址修改为 http://api.ttshitu.com/imageXYPlus
const imageFile = `E:/项目/daka/images/test.jpg` //填写自己的文件路径
let buff = fs.readFileSync(imageFile);
let base64data = buff.toString('base64');
axios.post(apiUrl, {
'username': 'simpledev',//用户名
'password': '123456',//密码
'typeid': '2',//验证码类型(默认 3 数英混合):16:汉字 14:图片旋转 11:计算题 7:无感学习,4:闪动GIF,3:数英混合, 2:纯英文,1:纯数字. //返回坐标类型(默认 19 一个坐标)。 19: 1个坐标, 20: 1 ~ 4个坐标, 21: 3 ~ 5个坐标, 22: 5 ~ 8个坐标。
'image': base64data
}).then(function (response) {
let d = response.data;
if (d.success){
// handle success
let {id, result} = d.data;
code=result;
console.log(result)
} else {
console.log(d.message)
}
});
},2000)
//})
}
qingqiu();
request(`http://xg.swpu.edu.cn/SPCP/Web/Account/GetLoginVCode?dt=${time}`, function (err, response, body) {
var exp=/^ASP.NET_SessionId=[0-9A-Za-z]{24}/
//console.log(exp.exec(response.headers['set-cookie'])[0])
cookie=exp.exec(response.headers['set-cookie'])[0]
console.log(cookie)
if (!err && response.statusCode == 200) {
//console.log(body)
}
})
var exportData={}
app.all('/server',(req,response)=>{
response.setHeader('Access-Control-Allow-Origin',"*")
const url="http://xg.swpu.edu.cn/SPCP/Web/";
var strHtml="";
var results=[];
http.get(url,function(res){
res.on("data",function(chunk){
strHtml+=chunk;
})
res.on("end",function(){
//console.log(strHtml);
var $=cheerio.load(strHtml);
var ReSubmiteFlag=$("input[name='ReSubmiteFlag']").val();
//var imgs=$("img")[0];
//console.log($.cookie)
//console.log(ReSubmiteFlag)
var data={
ReSubmiteFlag:ReSubmiteFlag,
imgs:`http://xg.swpu.edu.cn/SPCP/Web/Account/GetLoginVCode?dt=${time}`,
cookie:cookie,
code:code
}
response.json(data);
});
})
})
app.listen(8000,()=>{
console.log("服务已启动");
})
3.发送请求
var http=require("http");
var fs=require("fs");
var cheerio=require("cheerio");
const request = require('request')
const express=require('express')
const app=new express();
var time=new Date().getTime();
var cookie=""
var code=""
const axios = require('axios')
var data={}
function getReSbumiteFlag()
{
const url="http://localhost:8000/server"
axios({
method:"GET",
url:url
})
.then(res=>{
data=res.data
console.log(data)
})
}
getReSbumiteFlag()
setTimeout(()=>{
var sendData={
ReSubmiteFlag:data.ReSubmiteFlag,
StuLoginMode:1,
txtUid:201831082129,
txtPwd:113135,
code:data.code
}
axios({
method:"POST",
url:"http://xg.swpu.edu.cn/SPCP/Web/",
data:sendData,
headers:{
'Content-Type':'application/x-www-form-urlencoded',
'Connection':'keep-alive',
'Cookie':data.cookie
}
})
.then(res=>{
console.log(res)
})
},1000)