conv gbk to utf on webInterface

This commit is contained in:
OttoMao 2015-01-28 15:33:00 +08:00
parent de3ba93a61
commit 3dc255e4de
8 changed files with 49 additions and 18 deletions

View File

@ -1,3 +1,7 @@
22 Jan 2015: anyproxy 3.1.1:
* convert GBK to UTF8 in web interface
22 Jan 2015: anyproxy 3.1.0: 22 Jan 2015: anyproxy 3.1.0:
* will NOT intercept https request by default. Use ``anyproxy --intercept`` to turn on this feature. * will NOT intercept https request by default. Use ``anyproxy --intercept`` to turn on this feature.

View File

@ -73,15 +73,16 @@ function Recorder(option){
if(!id || !info.resBody) return; if(!id || !info.resBody) return;
//add to body map //add to body map
//do not save image data //ignore image data
if(/image/.test(info.resHeader['content-type'])){ if(/image/.test(info.resHeader['content-type'])){
self.recordBodyMap[id] = "(image)"; self.recordBodyMap[id] = "(image)";
}else{ }else{
self.recordBodyMap[id] = info.resBody.toString(); self.recordBodyMap[id] = info.resBody;
} }
}; };
self.getBody = function(id){ self.getBody = function(id){
if(id < 0){ if(id < 0){
return ""; return "";
@ -90,6 +91,10 @@ function Recorder(option){
return self.recordBodyMap[id] || ""; return self.recordBodyMap[id] || "";
}; };
self.getSingleRecord = function(id,cb){
db.find({_id:parseInt(id)},cb);
}
self.getSummaryList = function(cb){ self.getSummaryList = function(cb){
db.find({},cb); db.find({},cb);
}; };

View File

@ -1,6 +1,6 @@
{ {
"name": "anyproxy", "name": "anyproxy",
"version": "3.1.0", "version": "3.1.1",
"description": "A fully configurable proxy in NodeJS, which can handle HTTPS requests perfectly.", "description": "A fully configurable proxy in NodeJS, which can handle HTTPS requests perfectly.",
"main": "proxy.js", "main": "proxy.js",
"bin": { "bin": {
@ -11,8 +11,9 @@
"async-task-mgr": ">=1.1.0", "async-task-mgr": ">=1.1.0",
"colorful": "^2.1.0", "colorful": "^2.1.0",
"commander": "~2.3.0", "commander": "~2.3.0",
"entities": "^1.1.1", "ent": "^2.2.0",
"express": "^4.8.5", "express": "^4.8.5",
"iconv-lite": "^0.4.6",
"ip": "^0.3.2", "ip": "^0.3.2",
"juicer": "^0.6.6-stable", "juicer": "^0.6.6-stable",
"nedb": "^0.11.0", "nedb": "^0.11.0",

View File

@ -21,8 +21,9 @@ var http = require('http'),
express = require("express"), express = require("express"),
ip = require("ip"), ip = require("ip"),
fork = require("child_process").fork, fork = require("child_process").fork,
ThrottleGroup = require("stream-throttle").ThrottleGroup; ThrottleGroup = require("stream-throttle").ThrottleGroup,
iconv = require('iconv-lite'),
Buffer = require('buffer').Buffer;
var T_TYPE_HTTP = 0, var T_TYPE_HTTP = 0,
T_TYPE_HTTPS = 1, T_TYPE_HTTPS = 1,
@ -146,10 +147,32 @@ function proxyServer(option){
var child_webServer = fork(path.join(__dirname,"./webServer.js"),args); var child_webServer = fork(path.join(__dirname,"./webServer.js"),args);
child_webServer.on("message",function(data){ child_webServer.on("message",function(data){
if(data.type == "reqBody" && data.id){ if(data.type == "reqBody" && data.id){
child_webServer.send({
type : "body", GLOBAL.recorder.getSingleRecord(data.id,function(err,doc){
id : data.id, var result;
body : GLOBAL.recorder.getBody(data.id) try{
var record = doc[0],
resHeader = record['resHeader'] || {},
bodyContent = GLOBAL.recorder.getBody(data.id);
result = bodyContent;
if(/charset=gbk/i.test(JSON.stringify(resHeader))){
result = iconv.decode(bodyContent, 'GBK');
}
child_webServer.send({
type : "body",
id : data.id,
body : result.toString()
});
}catch(e){
child_webServer.send({
type : "body",
id : null,
body : null,
error:e.toString()
});
}
}); });
} }
}); });

View File

@ -194,6 +194,7 @@ body{
padding: 10px; padding: 10px;
border: 1px solid #99baca; border: 1px solid #99baca;
background: #f5fbfe; background: #f5fbfe;
word-wrap:break-word;
} }
.subTitle{ .subTitle{

View File

@ -35,7 +35,7 @@ define("./detail",['$', 'gallery/underscore/1.6.0/underscore.js'],function(requi
' <section class="resBody">'+ ' <section class="resBody">'+
' <h4 class="subTitle">response body</h4>'+ ' <h4 class="subTitle">response body</h4>'+
' <div class="detail">'+ ' <div class="detail">'+
' <div class="J_responseBody resBodyContent"></div>'+ ' <pre class="J_responseBody resBodyContent"></pre>'+
' </div>'+ ' </div>'+
' </section>'+ ' </section>'+
' <% } %>'; ' <% } %>';

View File

@ -166,10 +166,8 @@ seajs.use(['$', 'Underscore', 'Backbone',"Handlebars","Popup","./detail"], funct
}); });
})(); })();
//render custom menu //[test]render custom menu
var customMenu = $("#customMenu").val().split("@@@"); var customMenu = $("#customMenu").val().split("@@@");
console.log(customMenu);
//data via web socket //data via web socket
if(!WebSocket){ if(!WebSocket){

View File

@ -6,7 +6,7 @@ var express = require("express"),
certMgr = require("./lib/certMgr"), certMgr = require("./lib/certMgr"),
events = require("events"), events = require("events"),
inherits = require("util").inherits, inherits = require("util").inherits,
entities = require("entities"), ent = require("ent"),
qrCode = require('qrcode-npm'), qrCode = require('qrcode-npm'),
WebSocketServer = require('ws').Server; WebSocketServer = require('ws').Server;
@ -38,14 +38,13 @@ function proxyWebServer(port,webSocketPort,proxyConfigPort,ruleSummary,ipAddress
// }); // });
app.get("/body",function(req,res){ app.get("/body",function(req,res){
var reqQuery = url.parse(req.url,true); var id = req.query.id;
var id = reqQuery.query.id;
res.setHeader("Content-Type","text/html"); res.setHeader("Content-Type","text/html");
res.writeHead(200); res.writeHead(200);
fetchBody(id,function(body){ fetchBody(id,function(body){
res.end(entities.encodeHTML(body)); res.end(ent.encode(body));
}); });
}); });