net/http包提供了HTTP客户端和服务端的实现。
- Http服务端
package mainimport ("fmt""net/http"
)func main(){//注册回调函数http.HandleFunc("/hello", handler)//绑定tcp监听地址,并开始接受请求,然后调用服务端处理程序来处理传入的连接请求。//params:第一个参数 addr 即监听地址;第二个参数表示服务端处理程序,通常为nil//当参2为nil时,服务端调用 http.DefaultServeMux 进行处理http.ListenAndServe("127.0.0.1:8080", nil)
}func handler (w http.ResponseWriter, r *http.Request){fmt.Println("method = ", r.Method) //请求方法fmt.Println("URL = ", r.URL) // 浏览器发送请求文件路径fmt.Println("header = ", r.Header) // 请求头fmt.Println("body = ", r.Body) // 请求包体fmt.Println(r.RemoteAddr, "连接成功") //客户端网络地址w.Write([]byte("hello http server"))
}
http.HandleFunc-注册回调函数
http.ListenAndServe-监听请求和服务
浏览器请求结果
- Http客户端
package mainimport("fmt""io/ioutil""net/http"
)func main() {// 使用Get方法获取服务器响应包数据resp, err := http.Get("http://127.0.0.1:8080/hello")if err != nil {fmt.Println("Get err:", err)return}defer resp.Body.Close()// 获取服务器端读到的数据fmt.Println("Status = ", resp.Status) // 状态fmt.Println("StatusCode = ", resp.StatusCode) // 状态码fmt.Println("Header = ", resp.Header) // 响应头部fmt.Println("Body = ", resp.Body) // 响应包体//读取body内的内容content, err := ioutil.ReadAll(resp.Body)// 打印从body中读到的所有内容fmt.Println("result = ", string(content))
}
content, err := ioutil.ReadAll(resp.Body)//解析字段