再一次的, 复习了自己前面几篇博客却发现具体实施这个过程还不太具体。所以今天补上代码。
package main
import (
"flag"
"log"
"net/http"
"net/url"
"github.com/elazarl/goproxy"
_ "github.com/elazarl/goproxy/ext/auth"
)
var (
addr = flag.String("addr", ":8080", "proxy listen address")
verbose = flag.Bool("v", false, "should every proxy request be logged to stdout")
)
func init() {
flag.Parse()
}
func main() {
proxy := goproxy.NewProxyHttpServer()
// proxy.OnRequest().Do(auth.Basic("my_realm", func(user, passwd string) bool {
// return user == "user" && passwd == "open sesame"
// }))
proxy.Verbose = *verbose
proxyUrl, err := url.Parse("http://user:[email protected]:8080")
if err != nil {
panic(err)
}
log.Printf("Using proxy <%v>", proxyUrl)
proxy.Tr.Proxy = http.ProxyURL(proxyUrl)
log.Fatal(http.ListenAndServe(*addr, proxy))
}
注意,這個過程是通過查詢NewProxyHttpServer的过程实现。(见前面)
他自己挂上了Proxy, 也就是http.ProxyFromEnvironment, 在启动这个圈的时候只要设置了適當的環境變量即可使用本地的圈來作為中間人。
注釋處就是簡單的設置密碼。