
Eine anpassbare HTTP/HTTPS-Proxy-Bibliothek für Go mit Unterstützung für reguläres Forwarding, CONNECT-Tunneling, MITM-TLS-Interception und programmatische Anfrage-/Antwort-Modifikation.
GoProxy ist eine Bibliothek zur Erstellung eines angepassten HTTP/HTTPS-Proxy-Servers mit Go (auch Golang genannt) und mehreren konfigurierbaren Einstellungen.
Das Ziel dieses Projekts ist es, einen optimierten Proxy-Server anzubieten, der bei einer angemessenen Menge an Datenverkehr nutzbar ist und dennoch anpassbar und programmierbar bleibt.
Der Proxy selbst ist einfach ein net/http-Handler, sodass du mehrere Middlewares (Panic-Recovery, Logging, Komprimierung usw.) darüber hinzufügen kannst. Er lässt sich problemlos in jede andere HTTP-Netzwerkbibliothek integrieren.
Um goproxy zu verwenden, sollte man den Browser (oder einen anderen Client) so einstellen, dass goproxy als HTTP-Proxy verwendet wird.
So machst du das in Chrome und in Firefox.
Wenn du mit dem base-Beispiel beginnen möchtest, ist die URL, die du als Proxy verwenden solltest, localhost:8080, die Standard-URL in unserem Beispiel.
Du musst außerdem das Zertifikat der Proxy-CA vertrauen, um Zertifikatsprobleme bei den Clients zu vermeiden.
bestimmte Hosts ausführen, mit einem einfachen Gleichheitsvergleich oder mit Regex-AuswertungRequests und Responses manipulieren, bevor sie an den Browser gesendet werdenbenutzerdefinierten http.Transport verwenden, um Requests an den Zielserver zu sendenMITM-Zertifikats-Cache angeben, um sie später für andere Requests an denselben Host wiederzuverwenden und so CPU zu sparen. Standardmäßig nicht aktiviert, aber du solltest ihn in der Produktion verwenden!benutzerdefinierten Handler umleiten, wenn das Ziel ein relativer Pfad ist (z. B. /ping)Logger-Interface implementierstKanonisierung der HTTP-Request-Header deaktivieren, indem du PreventCanonicalization auf true setztNutzt dein Unternehmen GoProxy? Hilf uns, das Projekt gewartet und gesund zu halten! Die Unterstützung von GoProxy erlaubt es uns, mehr Zeit für Fehlerbehebungen und neue Funktionen aufzuwenden. Im Gegenzug zeigen wir dein Firmenlogo hier stolz an, wenn du einen Gold-Supporter- oder Enterprise-Plan wählst.
Wenn du GoProxy in dein Projekt integrieren musst oder benutzerdefinierte Funktionen benötigst, die du in deinem Fork pflegen möchtest, kannst du Erik (den derzeitigen Betreuer) per E-Mail kontaktieren und gemeinsam besprechen, wie er dir als bezahlter unabhängiger Berater helfen kann.
Wenn du Probleme hast, Vorschläge hast oder einen Fehler findest, zögere nicht, ein GitHub-Issue zu eröffnen.
Dies ist ein von Freiwilligen verwaltetes Open-Source-Projekt, und wir freuen uns, über alles zu diskutieren, was es verbessern kann.
Erkläre alles genau, einschließlich des Grundes für das Issue und was du ändern möchtest, um das Problem verständlicher zu machen.
Du kannst auch direkt einen Pull Request eröffnen, wenn es sich um eine kleine Codeänderung handelt, aber du musst in der Beschreibung alles erklären.
Wenn du einen Pull Request mit dem Namen refactoring und 5.000 geänderten Zeilen eröffnest, werden wir ihn nicht mergen ... :D
Der Code für dieses Projekt wird unter der BSD-3-Clause-Lizenz veröffentlicht, was ihn auch für kommerzielle Zwecke nutzbar macht.
Du hast GoProxy also in eines deiner persönlichen Projekte oder in ein Projekt des Unternehmens, für das du arbeitest, eingeführt und integriert.
Wir freuen uns über neue kreative Lösungen, die mit dieser Bibliothek erstellt wurden. Zögere also nicht, den oben genannten Betreuer per E-Mail zu kontaktieren und zu erklären, warum du dieses Projekt für deine Bedürfnisse nützlich fandest.
Wenn du eine Geheimhaltungsvereinbarung mit dem Unternehmen unterzeichnet hast, kannst du vorschlagen, dass sie einen Blogbeitrag zu diesem Thema auf ihrer offiziellen Website schreiben. So werden diese Informationen öffentlich, und du kannst uns den Link des Blogbeitrags mitteilen :)
Der Zweck von Fallstudien ist es, mit der Community zu teilen, warum alle Beitragenden zu diesem Projekt mit ihrer Hilfe die Welt verbessern und was Menschen damit bauen.
Die Codebasis führt bei deinem Pull-Request-Code eine automatische Lint-Prüfung durch. Bevor du ihn eröffnest, solltest du prüfen, ob deine Änderungen diese einhalten, indem du den Linter auf deinem lokalen Rechner ausführst, damit es keine Überraschungen gibt.
So installierst du den Linter:
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
Dadurch wird eine ausführbare Datei in deinem $GOPATH/bin-Ordner erstellt
($GOPATH ist eine Umgebungsvariable, normalerweise
entspricht ihr Wert ~/go; überprüfe den Wert auf deinem Rechner, wenn du
dir nicht sicher bist).
Stelle sicher, dass der bin-Ordner im Pfad deiner Shell enthalten ist, um den Befehl golangci-lint run direkt verwenden zu können.
Um einen Vorgeschmack auf goproxy zu bekommen, hier ist ein einfacher HTTP/HTTPS-Proxy, der Daten einfach an das Ziel weiterleitet:
package main
import (
"log"
"net/http"
"github.com/elazarl/goproxy"
)
func main() {
proxy := goproxy.NewProxyHttpServer()
proxy.Verbose = true
log.Fatal(http.ListenAndServe(":8080", proxy))
}
Diese Zeile fügt allen Requests, die über den Proxy gesendet werden, den Header X-GoProxy: yxorPoG-X hinzu, bevor sie an das Ziel gesendet werden:
proxy.OnRequest().DoFunc(
func(r *http.Request,ctx *goproxy.ProxyCtx)(*http.Request,*http.Response) {
r.Header.Set("X-GoProxy","yxorPoG-X")
return r,nil
})