net/http包
概念的问题
Request:用户请求的信息,用来解析用户的请求信息,包括post、get、cookie、url等信息
Response:服务器需要反馈给客户端的信息
Conn:用户的每次请求链接
Handler:处理请求和生成返回信息的处理逻辑
http服务端
处理http与https
- 处理http请求 http.ListenAndServe(addr,handler) error
第一个参数监听地址
第二个参数服务端处理程序
或1
2
3
4
5
6
7
8
9s := &http.Server{
Addr: ":8080",
Handler: myHander,
ReadTimeout: 10 * time.Second,
WriteTimeout: 10 * time.Second,
MaxHeaderBytes: 1 << 20,
}
log.Fatal(s.ListenAndServe())
- 处理https请求 http.ListenAndServeTLS()
1
2
3
4http.Handle("/foo", fooHandler)
http.HandleFunc("/bar", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path)) })
log.Fatal(http.ListenAndServeTLS(":10443", "cert.pem", "key.pem", nil))
或者是:1
2
3
4
5
6
7
8ss := &http.Server{
Addr: ":10443",
Handler: myHandler,
ReadTimeout: 10 * time.Second,
WriteTimeout: 10 * time.Second,
MaxHeaderBytes: 1 << 20,
}
log.Fatal(ss.ListenAndServeTLS("cert.pem", "key.pem"))
http客户端
基本方法,实现http请求
func (c Client) Get(url string) (r Response, err error)
1
2
3
4
5
6
7resp,err := http.Get("http://example.com/")
if err != nil {
// 错误
return
}
defer resp.Body.close()
io.Copy(os.Stdout,resp.Body)func (c Client) Post(url string, bodyType string, body io.Reader) (r Response, err error)
第二个参数是MIMEType
第三个参数以[]byte
形式1
2
3
4
5
6
7
8
9resp.err := http.Post("http://example.com/upload","image/jpeg",&imageDataBuf)
if err != nil {
//错误
return
}
if resp.StatusCode != http.StatusOK{
//错误
return
}
- func (c Client) PostForm(url string, data url.Values) (r Response, err error) func (c Client) Head(url string) (r Response, err error)
实现标准编码格式为application/x-www-form-urlencoded
的表单提交.1
2
3
4
5resp,err := http.PostForm("http://example.com/posts",url.Values{"title":{"article title"},"content":{"article body"}})
if err != nil{
// 错误
return
}
- func (c Client) Head(url string) (r Response, err error)
只请求目标url的头部,不返回http的body1
resp,err := http.Head("http://example.com")
- func (c Client) Do(req Request) (resp *Response, err error)
自定义”User-Agent”,不是默认的”go http package”1
2
3
4
5req,err := http.NewRequest("Get","http://example.com",nil)
req.Header.Add("User-Agent","Custom User-Agent")
client := $http.Client{//...}
resp,err !=client.Do(req)
传递cookie
高级封装
自定义的http.Client
自定义的http.Transport
灵活的 http.RoundTripper 接口
http client包含
http底层传输细节
http代理
gzip压缩
连接池及管理
认证(ssl或其他认证方式)