
Uma biblioteca de proxy HTTP/HTTPS personalizável para Go, com suporte a encaminhamento regular, tunelamento CONNECT, interceptação TLS MITM e modificação programática de requisições/respostas.
GoProxy é uma biblioteca para criar um servidor proxy HTTP/HTTPS personalizado usando
Go (também conhecido como Golang), com várias configurações disponíveis.
O objetivo deste projeto é oferecer um servidor proxy otimizado, utilizável com
uma quantidade razoável de tráfego, mas também personalizável e programável.
O proxy em si é simplesmente um handler net/http, então você pode adicionar vários
middlewares (panic recover, logging, compressão, etc.) sobre ele. Ele pode ser
facilmente integrado com qualquer outra biblioteca de rede HTTP.
Para usar o goproxy, você deve configurar seu navegador (ou qualquer outro cliente)
para usar o goproxy como um proxy HTTP.
Veja como fazer isso no Chrome
e no Firefox.
Se você decidir começar com o exemplo base, a URL que você deve usar como
proxy é localhost:8080, que é a padrão no nosso exemplo.
Você também precisa confiar
no certificado CA do proxy, para evitar qualquer problema de certificado nos clientes.
hosts específicos, com uma única comparação de igualdade ou com avaliação de regexrequests e responses antes de enviá-los ao navegadorhttp.Transport personalizado para realizar requisições ao servidor de destinocache de certificados MITM, para reutilizá-los posteriormente em outras requisições ao mesmo host, economizando CPU. Não habilitado por padrão, mas você deve usá-lo em produção!handler personalizado, quando o destino for um caminho relativo (ex.: /ping)Loggerdesabilitar a canonicalização dos cabeçalhos das requisições HTTP, definindo PreventCanonicalization como trueSua empresa usa o GoProxy? Ajude-nos a manter o projeto ativo e saudável! Apoiar o GoProxy nos permite dedicar mais tempo a correções de bugs e novos recursos. Em troca, se você escolher um plano Gold Supporter ou Enterprise, exibiremos orgulhosamente o logotipo da sua empresa aqui.
Se você precisar integrar o GoProxy ao seu projeto, ou precisar de alguns recursos personalizados para manter no seu fork, você pode entrar em contato com Erik (o mantenedor atual) por e-mail, e vocês podem discutir juntos como ele pode ajudar você como consultor independente remunerado.
Se você tiver algum problema, sugestão, ou se encontrar um bug, sinta-se à vontade
para entrar em contato abrindo uma issue no GitHub.
Este é um projeto open source gerenciado por voluntários, e ficamos felizes
em discutir qualquer coisa que possa melhorá-lo.
Certifique-se de explicar tudo, incluindo o motivo por trás da issue
e o que você deseja alterar, para tornar o problema mais fácil de entender.
Você também pode abrir diretamente um Pull Request, se for uma pequena alteração de código, mas
você precisa explicar tudo na descrição.
Se você abrir um pull request chamado refactoring com 5.000 linhas alteradas,
não vamos mesclá-lo... :D
O código deste projeto é distribuído sob a licença BSD 3-Clause,
tornando-o útil também para usos comerciais.
Então, você introduziu e integrou o GoProxy em um dos seus projetos pessoais ou em um projeto dentro da empresa em que você trabalha.
Ficamos felizes em conhecer novas soluções criativas feitas com esta biblioteca,
então sinta-se à vontade para entrar em contato com o mantenedor listado acima por e-mail,
explicando por que você achou este projeto útil para suas necessidades.
Se você assinou um Acordo de Confidencialidade (Non Disclosure Agreement) com a empresa, você
pode propor a eles que escrevam um post de blog no site oficial deles sobre
este tópico, assim essa informação será pública por escolha deles, e você pode
compartilhar o link do post do blog conosco :)
O objetivo dos estudos de caso é compartilhar com a comunidade por que todos os
contribuidores deste projeto estão melhorando o mundo com a ajuda deles e
o que as pessoas estão construindo usando-o.
O codebase usa uma verificação automática de lint no código do seu Pull Request. Antes de abri-lo, você deve verificar se suas alterações o respeitam, executando o linter na sua máquina local, para que você não tenha nenhuma surpresa.
Para instalar o linter:
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
Isso criará um executável na sua pasta $GOPATH/bin
($GOPATH é uma variável de ambiente, geralmente
seu valor é equivalente a ~/go, verifique o valor na sua máquina se você
não tiver certeza sobre isso).
Certifique-se de incluir a pasta bin no path do seu shell, para poder
usar diretamente o comando golangci-lint run.
Para ter um gostinho do goproxy, aqui está um proxy HTTP/HTTPS básico
que apenas encaminha dados para o destino:
package main
import (
"log"
"net/http"
"github.com/elazarl/goproxy"
)
func main() {
proxy := goproxy.NewProxyHttpServer()
proxy.Verbose = true
log.Fatal(http.ListenAndServe(":8080", proxy))
}
Esta linha adicionará o cabeçalho X-GoProxy: yxorPoG-X a todas as requisições enviadas através do proxy,
antes de enviá-las ao destino:
proxy.OnRequest().DoFunc(
func(r *http.Request,ctx *goproxy.ProxyCtx)(*http.Request,*http.Response) {
r.Header.Set("X-GoProxy","yxorPoG-X")
return r,nil
})
Quando a entrada de OnRequest() estiver vazia, a função especificada em DoFunc
processará todas as requisições recebidas pelo proxy. Nesse caso, ela adicionará
um cabeçalho à requisição e a retornará ao chamador.
O proxy enviará a requisição modificada ao destino.
Você também pode usar Do em vez de DoFunc, se você implementar a interface
especificada no seu tipo.