Go 的 http 包封装的实在很 BT,几十行代码就能写个 http 代理服务器。支持 get,post,支持 cookie,支持 gzip。对了需要使用最新的源码编译,不然会有 BUG。自己 hg 下载源码编译一下才行,最新的一个 BUG 刚刚被修正。不多说直接上代码。 package main import ( ..

用 Golang Go 语言写个 HTTP 代理服务器

本贴最后更新于 2442 天前,其中的信息可能已经东海扬尘

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

  • HTTP
    45 引用 • 106 回帖
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    316 引用 • 1150 回帖 • 733 关注
  • 代理
    39 引用 • 96 回帖
回帖   
请输入回帖内容...