Go语言HTTP编程详解(附带实例)
HTTP(hypertext transfer protocol)协议,即超文本传输协议,是互联网上应用最为广泛的一种网络协议,它规定了浏览器和服务器之间交互通信的规则,通过互联网传送文档的数据传送协议。HTTP 协议通常承载于 TCP 协议之上。
为了实现 HTTP 客户端,net/http 包中的 Client 类型提供如下几个函数:
下面演示如何编写简单的 HTTP 客户端。代码如下:
http.ListenAndServe() 函数的语法格式如下:
此外,net/http 包还提供 http.ListenAndServeTLS() 函数,用于处理 HTTPS 连接请求。http.ListenAndServeTLS() 函数的语法格式如下:
下面演示如何编写简单的 HTTP 服务端。代码如下:
当运行程序时,要先运行 HTTP 服务器端,再运行 UDP 客户端,在 UDP 客户端所在 VSCode 窗口的控制台上打印如下的信息:
Go语言HTTP客户端
因为 Go 语言内置的 net/http 包涵盖 HTTP 客户端的具体实现,所以 HTTP 客户端的具体实现不需要借助第三方网络通信库。为了实现 HTTP 客户端,net/http 包中的 Client 类型提供如下几个函数:
func (c *Client) Get(url string) (r *Response, err error) func (c *Client) Post(url string, bodyType string, body io.Reader) (r *Response, err error) func (c *Client) PostForm(url string, data url.Values) (r *Response, err error) func (c *Client) Head(url string) (r *Response, err error) func (c *Client) Do(req *Request) (resp *Response, err error)函数说明如下:
- Get():用于请求资源,如网址首页等;
- Post():用于发送数据;
- PostForm():用于提交标准编码格式为 application/x-www-form-urlencoded 的表单;
- Head():用于只请求资源的头部信息;
- Do():用于设定一些自定义的 HTTP Header 字段,满足 HTTP 请求中的定制信息。
下面演示如何编写简单的 HTTP 客户端。代码如下:
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
// 发送 HTTP 请求,请求一个网页
response, err := http.Get("http://localhost:3000/hello")
if err != nil {
fmt.Println("请求失败:", err)
return
}
defer response.Body.Close() // 关闭请求
// 接收数据
body, _ := ioutil.ReadAll(response.Body)
fmt.Println(string(body))
}
Go语言HTTP服务端
使用 net/http 包提供的 http.ListenAndServe() 函数可以监听指定地址并处理 HTTP 请求。http.ListenAndServe() 函数的语法格式如下:
func ListenAndServe(addr string, handler Handler) error参数说明如下:
- addr:监听地址;
- handler:用于处理连接请求的服务端处理程序,通常为空。
此外,net/http 包还提供 http.ListenAndServeTLS() 函数,用于处理 HTTPS 连接请求。http.ListenAndServeTLS() 函数的语法格式如下:
func ListenAndServeTLS(addr string, certFile string, keyFile string, handler Handler) error参数说明如下:
- addr:监听地址;
- certFile:对应证书文件(如 SSL 证书)存放路径;
- keyFile:对应证书私钥文件路径;
- handler:用于处理连接请求的服务端处理程序,通常为空。
下面演示如何编写简单的 HTTP 服务端。代码如下:
package main
import (
"flag"
"net/http"
)
func main() {
// 域名监听地址
host := flag.String("host", "127.0.0.1", "listen host")
// 监听端口
port := flag.String("port", "3000", "listen port")
flag.Parse()
// 注册处理函数
http.HandleFunc("/hello", Hello)
// 启动 HTTP 服务并监听指定地址
err := http.ListenAndServe(*host+":"+*port, nil)
if err != nil {
panic(err)
}
}
// Hello 处理函数:向客户端返回简单文本
func Hello(w http.ResponseWriter, req *http.Request) {
w.Write([]byte("你好,客户端!"))
}
为了保证上述程序成功运行,要打开两个 VS Code 窗口:一个窗口是 HTTP 服务器端,另一个窗口是 HTTP 客户端。当运行程序时,要先运行 HTTP 服务器端,再运行 UDP 客户端,在 UDP 客户端所在 VSCode 窗口的控制台上打印如下的信息:
你好,客户端!
这说明 HTTP 服务器端成功处理了由 HTTP 客户端发送的 HTTP 请求。
ICP备案:
公安联网备案: