123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- 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)
- }
- }
|