Luis Figueiredo пре 8 година
комит
583b951b8d
2 измењених фајлова са 70 додато и 0 уклоњено
  1. 10 0
      README.md
  2. 60 0
      main.go

+ 10 - 0
README.md

@@ -0,0 +1,10 @@
+QuickProxy
+=================
+
+Simple tool to create a reverse proxy for development purposes
+
+Usage:
+```bash
+qproxy -l 0.0.0.0:8080 -t http://www.google.com
+```
+

+ 60 - 0
main.go

@@ -0,0 +1,60 @@
+package main
+
+import (
+	"flag"
+	"fmt"
+	"log"
+	"net/http"
+	"net/http/httputil"
+	"net/url"
+)
+
+func main() {
+	var listenAddr string
+	var targetAddr string
+
+	flag.StringVar(&listenAddr, "l", "", "Listen address")
+	flag.StringVar(&targetAddr, "t", "", "Target address")
+	flag.Parse()
+
+	if listenAddr == "" || targetAddr == "" {
+		flag.Usage()
+		return
+	}
+
+	mux := http.NewServeMux()
+
+	u, err := url.Parse(targetAddr)
+	if err != nil {
+		fmt.Println("URL error:", err)
+		return
+	}
+
+	rproxy := httputil.NewSingleHostReverseProxy(u)
+
+	fmt.Println("Listening at:", listenAddr)
+	mux.HandleFunc("/", LogHandler(rproxy.ServeHTTP))
+
+	err = http.ListenAndServe(listenAddr, mux)
+	if err != nil {
+		fmt.Println("Err:", err)
+	}
+
+}
+
+type qlogHandler struct {
+	http.ResponseWriter
+	statusCode int
+}
+
+func (q *qlogHandler) WriteHeader(statusCode int) {
+	q.statusCode = statusCode
+	q.ResponseWriter.WriteHeader(statusCode)
+}
+func LogHandler(next http.HandlerFunc) http.HandlerFunc {
+	return func(w http.ResponseWriter, r *http.Request) {
+		l := &qlogHandler{w, 200}
+		next(l, r)
+		log.Printf("%d - %s %s", l.statusCode, r.Method, r.URL)
+	}
+}