Crie um proxy HTTP personalizável simples que permite interceptar e alterar o conteúdo da solicitação / resposta

Se você já precisou depurar um JS ou mesmo CSS em um site que não possui, ou talvez você deva corrigir algum script JS na produção e a única maneira é com git commit (você não tem um ambiente dev) e isso pode quebrar algo se não foi devidamente testado e você não quer fazer 100s de commits para depurar ao vivo. Ou talvez você queira mapear http://site.com/some/dir/* para / home / user / my / dir / * para que cada url correspondente abra arquivos em seu disco, respectivamente.

A principal questão é: Quando digo ao meu navegador para abrir o siteX.com, há uma maneira de interceptar cada arquivo externo que o siteX e seus scripts desejam acessar?
Resposta simples: Sim, use um proxy
Minha resposta: Sim, mas eu quero um proxy, posso personalizar muito e criar plug-ins e permitir que outros criem plug-ins para ele.
Esta ferramenta ainda é muito beta, mas acho muito interessante e muito legal porque você pode notar todas as solicitações que o navegador está fazendo. É como se o firebug estivesse faltando alguma coisa.

Está aqui: https://github.com/hernan604/HTTP-Proxy-Interceptor

1 – passos rápidos para instalar

Instale as dependências de perl

se você não sabe o que está fazendo, abra o terminal e certifique-se de ver qualquer saída de versão do perl executando o comando: perl -v
e então quando você certificar-se de que o perl está instalado, você pode executar esses comandos com sudo e tudo provavelmente será instalado sem complicações:

curl -L http://cpanmin.us | perl – –sudo App :: cpanminus
sudo cpanm Moose LWP :: UserAgent Data :: Printer Config :: Any File :: Slurp URI URI :: QueryParam v5.10 Getopt :: Long Net :: Server

Crie uma configuração com os urls que deseja interceptar:

Crie my_config.json (remova os comentários):

{
http://www.site.com.br/js/script.js?v=136 “: {<- abre o conteúdo do arquivo quando o navegador abre esse url
“arquivo”: “/home/hernan/teste.js ”
},
http://www.site.com.br/some/c/coolscript.js?ABC=xyz “: {<- mostra o conteúdo de outro url
” url “:” http: //www.outra- url.com.br/por-este-arquivo-no-lugar/novo_coolscripts.js?nome=maria “,
” usar var aleatório “: falso
},
http://site.com/resources/ ( ? <caminho> . +) “: {<- mapeia o diretório remoto para o diretório local
” relative_path “:” /home/hernan/site.com/resources/ ”
}
}

ou você pode usar a sintaxe perl para configuração também, ou seja: my_config.pl

{
http://www.site.com.br/js/script.js?v=136 ” => {
“file” => “/home/webdev/teste.js”
},
http: // www .site1.com.br / scripts.js “=> {
” url “=>” http://www.othersite.com.br/other-scripts.js “,
” use random var “=> false
},
http://p1-cdn.trrsf.com/image/fget/cf/742/556/0/55/407/305/images.terra.com/2013/09/04/italianomortebrasileirafacereprod.jpg “=> {
” url “=>” http://h.imguol.com/1309/14beyonce23-gb.jpg
},
http://site.com/resources/ (? <caminho>. +) “=> {
” relative path “=>” /home/hernan/site.com/resources/ ”
},
http://www.w3schools.com/ “=> {
” code ” => sub {
my ($ self, $ content) = @
;
$ content = ~ s / Aprenda / CLIQUE POR ERRADO / gix;
return $ content;
}
},

}

Inicie o proxy

perl proxy-sem-ssl.pl -config my_config.json -porta 9000

você deve ver uma saída como esta:

Plugin method add => replace for relativepath
Plugin method add => replace url
Plugin method add => abre
arquivo
2013/09 / 12-12: 36: 05 Meu :: Proxy (digite Net :: Server) iniciando! pid (12566)
Resolvido [*]: 9876 para [0.0.0.0]: 9876,
Vinculação IPv4 à porta TCP 9876 no host 0.0.0.0 com
Grupo IPv4 não definido. Padronizado para EGID ‘1001 1001’
Usuário não definido. Padronizando para EUID ‘1001’

2 – Sobre o código e plugins

É um proxy muito simples feito com perl. Se der uma olhada em “proxy-sem-ssl.pl”, você notará que ele é composto por 4 plug-ins:

Plugin :: ContentModifier:
– permite que você modifique o conteúdo de uma solicitação. Funciona por url.

Plugin :: RelativePath
– permite mapear um caminho remoto para um caminho local. Irá abrir o conteúdo dos arquivos localmente como se fossem servidos do site

Plugin :: UrlReplacer
– Funciona por url e obterá conteúdo de url2 quando você solicitar url1

Plugin :: Arquivo
– Funciona por url e mostrará o conteúdo dos arquivos localmente quando você tentar abrir urls específicas

O loop principal que recebe a solicitação do navegador:

HTTP :: URL :: Intercept :: Proxy;
– Este loop aqui recebe as requisições do navegador … se você adicionar a linha:
warn p $ lines
você notará a requisição http que está chegando … e você verá como o resto funciona

E então você cria seu proxy personalizado assim:

pacote My :: Custom :: Proxy;
use Moose;

estender da classe principal

estende qw / HTTP :: URL :: Intercept :: Proxy /;

e usar esses plugins

com qw /
HTTP :: URL :: Intercept :: Proxy :: Plugin :: RelativePath
HTTP :: URL :: Intercept :: Proxy :: Plugin :: UrlReplacer
HTTP :: URL :: Intercept :: Proxy :: Plugin :: Arquivo
/;

1;

meu $ proxy = Meu :: Custom :: Proxy-> new ();
My :: Custom :: Proxy-> run (port => $ proxy-> porta);