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。如有錯誤或未考慮完全的地方,望不吝賜教。

推薦閱讀: