首页 > 编程笔记 > Go语言笔记 阅读:13

Go语言HTTP编程详解(附带实例)

HTTP(hypertext transfer protocol)协议,即超文本传输协议,是互联网上应用最为广泛的一种网络协议,它规定了浏览器和服务器之间交互通信的规则,通过互联网传送文档的数据传送协议。HTTP 协议通常承载于 TCP 协议之上。

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)
函数说明如下:
下面演示如何编写简单的 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
参数说明如下:
此外,net/http 包还提供 http.ListenAndServeTLS() 函数,用于处理 HTTPS 连接请求。http.ListenAndServeTLS() 函数的语法格式如下:
func ListenAndServeTLS(addr string, certFile string, keyFile string, handler Handler) error
参数说明如下:
下面演示如何编写简单的 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 请求。

相关文章