设为首页 加入收藏

TOP

Go语言备忘录(3):net/http包的使用模式和源码解析(三)
2017-10-21 06:06:49 】 浏览:757
Tags:语言 备忘录 net/http 包的 使用 模式 源码 解析
ndlerFunc func(ResponseWriter, *Request) //实现Handler接口的ServeHTTP方法 func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) { f(w, r) //调用自身 }
 
至此,整个调用过程讲解完毕,至于业务层的处理逻辑,则由各个处理函数实现

四、重定向:
http包自带了几个创建常用处理器的函数:FileServer,NotFoundHandler、RedirectHandler、StripPrefix、TimeoutHandler。
RedirectHandler函数就是用来重定向的:它返回一个请求处理器,该处理器会对每个请求都使用状态码code重定向到网址url
func main() {
  mux := http.NewServeMux()
  mux.Handle("/to",http.RedirectHandler("http://example.org", 307))
  err := http.ListenAndServe(*addr,mux) //启动监听
   if err != nil {
      log.Fatalln("ListenAndServe: ", err)
   }
}
 
好了,本文就暂时讲关于http包关于HTTP服务端方面的东西,至于客户端方面的就简单引用一下官方文档说明吧,毕竟客户端很少用Go实现。
 
五、客户端的实现:

Get、Head、Post和PostForm函数发出HTTP/ HTTPS请求

resp, err := http.Get("http://example.com/")
...
resp, err := http.Post("http://example.com/upload", "image/jpeg", &buf)
...
resp, err := http.PostForm("http://example.com/form",
	url.Values{"key": {"Value"}, "id": {"123"}})

  

程序在使用完回复后必须关闭回复的主体

resp, err := http.Get("http://example.com/")
if err != nil {
	// handle error
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
// ...

  

管理HTTP客户端的头域、重定向策略和其他设置,创建一个Client

 
  
client := &http.Client{
	CheckRedirect: redirectPolicyFunc,
}
resp, err := client.Get("http://example.com")
// ...
req, err := http.NewRequest("GET", "http://example.com", nil)
// ...
req.Header.Add("If-None-Match", `W/"wyzzy"`)
resp, err := client.Do(req)
// ...
 
  

管理代理、TLS配置、keep-alive、压缩和其他设置,创建一个Transport

 
  
tr := &http.Transport{
	TLSClientConfig:    &tls.Config{RootCAs: pool},
	DisableCompression: true,
}
client := &http.Client{Transport: tr}
resp, err := client.Get("https://example.com")
 
  

Client和Transport类型都可以安全的被多个go程同时使用。出于效率考虑,应该一次建立、尽量重用

 
以上如有误导的地方,请前辈们务必指出!
 
 
首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Golang:使用 httprouter 构建 AP.. 下一篇Go语言版本的helloworld

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目