golang 實現Location跳轉方式
golang作為互聯網時代的C語言,對網絡的支持是非常友好的,最近想做個短網址轉發使用,自然想到用Golang開發。
閑話少說,直接上源碼:
package main import ( "fmt" "log" "net/http" ) func login(w http.ResponseWriter, r *http.Request) { fmt.Print(fmt.Sprintf("%v+", r)) w.Header().Set("Cache-Control", "must-revalidate, no-store") w.Header().Set("Content-Type", " text/html;charset=UTF-8") w.Header().Set("Location", "http://wap.baidu.com/")//跳轉地址設置 w.WriteHeader(307)//關鍵在這裡! } func main() { http.HandleFunc("/", login) //設置訪問的路由 err := http.ListenAndServe(":9090", nil) //設置監聽的端口 if err != nil { log.Fatal("ListenAndServe: ", err) } }
補充:Go獲取Location重定向url
go本身不提供重定向的url,如果想要獲取,隻能從源碼下手。
http.Get()接收到一個url後,會進一步確認,是否包含重定向url,如果包含,自動轉到新的url,我們需要做的就是在這之前截取重定向url。
進入到http包中找到函數:
//自用,保留url地址信息,頭部大寫進行暴露 var RedirectMy string //此行源碼中沒有,為自己添加 func defaultCheckRedirect(req *Request, via []*Request) error { //自用,將url根據需求進行組合 RedirectMy = "//"+req.URL.Host+req.URL.Path//此行源碼中沒有,為自己添加 if len(via) >= 10 { return errors.New("stopped after 10 redirects") } return nil }
從源碼中可以看出,go本身支持10次重定向,超過10次便會報錯。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。
推薦閱讀:
- Golang實現HTTP編程請求和響應
- golang構建HTTP服務的實現步驟
- go web 預防跨站腳本的實現方式
- golang 實現一個restful微服務的操作
- 一文詳解Golang中net/http包的實現原理