0
点赞
收藏
分享

微信扫一扫

Go语言-HTTP编程

月孛星君 2022-05-01 阅读 46

目录

前言

1、服务器配置

2、客户端配置

3、请求方法


前言

Go原生支持http,直接使用import("net/http")即可,http服务性能和nginx非常接近,都具备高并发支持的能力,代码实现起来比较简单。

1、服务器配置

package main

import (
	"fmt"
	"net/http"
)

//HTTP服务端配置
//业务请求相应处理
func hello(res http.ResponseWriter, req *http.Request) {
	fmt.Println("hello")
	fmt.Fprintln(res, "<h1>welcome</h1>")
}
func main() {
	//路由到指定站点位置跳转相关函数处理
	http.HandleFunc("/", hello)
	err := http.ListenAndServe("127.0.0.1:8088", nil)
	if err != nil {
		fmt.Println("启动监听失败,err:", err)
		return
	}
}

启动服务端

这时候用浏览器验证

2、客户端配置

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
)

//http客户端配置

func main() {
    /*
        http.Get()
        传入值为 url,是string类型
        返回值有两个,
        一个是请求,结构体类型,该结构体的Body字段是一个接口
        第二个是err
    */
    //在Get函数中,放入完整合格域名(FQDN)
    res, err := http.Get("https://www.baidu.com/")
    if err != nil {
        fmt.Println("获取信息失败,err:", err)
        return
    }
    /*
        接收 io.reader,这是一个接口
        返回字节切片和 err
    */
    //response结构体中读取信息
    buf, err := ioutil.ReadAll(res.Body)
    if err != nil {
        fmt.Println("读取信息失败,err:", err)
        return
    }
    fmt.Println(string(buf))
}

运行客户端

3、请求方法

Get请求:提交的数据都是追加在URL之后,限制点是URL的长度不能超过8K,不适用于提交量大的数据,适用于请求数据,get请求从服务器中读取资源,以明文形式发送请求。

Post请求:数据存放在包中,数据量不受限制,可以提交上传量大的数据信息,post用于更新服务器资源。

Put请求:用于在服务器上创建资源。

Delete请求:用户在服务器上删除资源。

Head请求:向服务器请求头部信息,用于监控服务状态。

示例:

package main

import (
	"fmt"
	"net/http"
)

//请求头部信息

var url []string = []string{
	"https://www.baidu.com/",
	"https://www.taobao.com/",
	"https://www.google.com/",
}

func main() {
	for _, v := range url {
		req, err := http.Head(v)
		if err != nil {
			fmt.Println("获取请求失败,err", err)
			return
		}
		fmt.Printf("来自%s的网站,状态是%s\n", v, req.Status)
	}
}

运行结果为

使用自建客户端进行超时时间优化

package main

import (
	"fmt"
	"net"
	"net/http"
	"time"
)

//请求头部信息

var url []string = []string{
	"https://www.baidu.com/",
	"https://www.taobao.com/",
	"https://www.google.com/",
}

func main() {
	for _, v := range url {
		//自建client做测试,优化超时时间
		client := http.Client{
			Transport: &http.Transport{
				//连接服务端
				Dial: func(network, addr string) (net.Conn, error) {
					//设置超时时间2秒
					timeout := time.Second * 2
					return net.DialTimeout(network, addr, timeout)
				},
			},
		}
		//使用自建客户端测试
		req, err := client.Head(v)
		if err != nil {
			fmt.Println("获取请求失败,err", err)
			return
		}
		fmt.Printf("来自%s的网站,状态是%s\n", v, req.Status)
	}
}

再次运行结果为

举报

相关推荐

0 条评论