Programming/node.js2019. 4. 12. 17:10

제목만 거창해지고 있네 ㅋㅋ

fs.mkdirSync(path, {recursive:true}); 로 해보려는데

1개 까진 생성해도 2개 깊이는 생성이 안되서 mkdirp 라는 모듈을 사용해서 해결

(아니 그럼.. parent 생성기능이 안되는 거잖아?)

[링크 : https://www.npmjs.com/package/mkdirp]

 

그리고 request가 아니라 response를 해주어야 하는거라 저장용도로는 일단 되는 듯

이걸 어떻게 request에 묶어서 다시 보내주지?

+

context에서 clientresponse를 통해 보내면 되는 듯.

ctx.proxyToClientResponse.end('Hacked, you cannot proceed to the website');

[링크 : https://github.com/joeferner/node-http-mitm-proxy/blob/master/examples/preventRequest.js]

 

var Proxy = require('http-mitm-proxy');
var proxy = Proxy();
var path = require('path');
var url = require('url');
var { URLSearchParams } = require('url');
var decode = require('urldecode')
var mkdirp = require('mkdirp');

var fs = require('fs');
var idx = 0;
var chunks = [];

proxy.use(Proxy.wildcard);

proxy.onError(function(ctx, err) {
                console.error('proxy error:', err);
                });

proxy.onRequest(function(ctx, callback) {
                {
                ctx.use(Proxy.gunzip);
                var pback = ctx.clientToProxyRequest.url;

                var params = new URLSearchParams(url.parse(pback).query);
                params.sort();
                //console.log(url.parse(pback).pathname + '?' + decode(params.toString()));

                ctx.onResponseData(function(ctx, chunk, callback) {
                        chunks.push(chunk);
                        return callback(null, chunk);
                        });
                }

                ctx.onResponseEnd(function(ctx, callback) {
                                //  console.log('REQUEST END', (Buffer.concat(chunks)).toString());
                                console.log('REQUEST END');
                                // console.log(path.basename(oriname.pathname))
                                // console.log(path.dirname(oriname.pathname))

                                var oriname = url.parse(ctx.clientToProxyRequest.headers.host + ctx.clientToProxyRequest.url)
                                var dirname = 'save/' + path.dirname(oriname.pathname) + '/';
                                var filename = path.basename(oriname.pathname) + idx;
                                //              idx++;
                                console.log(dirname);
                                console.log(filename);
                                mkdirp.sync(dirname);
                                fs.writeFileSync(dirname + filename, Buffer.concat(chunks));
                                chunks = [];
                                return callback();
                                });
                return callback();
});

proxy.onCertificateRequired = function(hostname, callback) {
        return callback(null, {
keyFile: path.resolve('/ca/certs/', hostname + '.key'),
certFile: path.resolve('/ca/certs/', hostname + '.crt')
});
};
proxy.listen({port: 3128});

 

 

 

[링크 : https://www.npmjs.com/package/http-mitm-proxy]

Posted by 구차니