Go 的 http 包封装的实在很 BT,几十行代码就能写个 http 代理服务器。支持 get,post,支持 cookie,支持 gzip。对了需要使用最新的源码编译,不然会有 BUG。自己 hg 下载源码编译一下才行,最新的一个 BUG 刚刚被修正。不多说直接上代码。
package main
import (
"io"
"io/ioutil"
"log"
"net/http"
"os"
)
func handler(w http.ResponseWriter, r *http.Request) {
resp, err := http.DefaultClient.Do(r)
defer resp.Body.Close()
if err != nil {
panic(err)
}
for k, v := range resp.Header {
for _, vv := range v {
w.Header().Add(k, vv)
}
}
for _, c := range resp.Cookies() {
w.Header().Add("Set-Cookie", c.Raw)
}
w.WriteHeader(resp.StatusCode)
result, err := ioutil.ReadAll(resp.Body)
if err != nil && err != io.EOF {
panic(err)
}
w.Write(result)
}
func main() {
http.HandleFunc("/", handler)
log.Println("Start serving on port 8888")
http.ListenAndServe(":8888", nil)
os.Exit(0)
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于