emApc 2023-11-28 16:34:17

http get/post请求

// 参数顺序:url, contentType, method, body string
func HttpRequest(param ...string) ([]byte, error) {
	/*   生成client,参数默认;
	*    这个结构体有四个属性
	*    Transport(RoundTrepper);指定执行的独立、单次http请求的机制
	*    CheckRedirect(func(req *Request, via []*Request)err):指定处理重定向的策略,如果不为nil,客户端在执行重定向之前调用本函数字段.如果CheckRedirect 返回一个错误,本类型中的get方法不会发送请求,如果CheckRedirect为nil,就会采用默认策略:连续请求10次后停止;
	*    jar(CookieJar):jar指定cookie管理器,若果为nil请求中不会发送cookie,回复中的cookie会被忽略
	*    TimeOut(time.Duration):指定本类型请求的时间限制,为0表示不设置超时
	 */
	//client := &http.Client{}    这里初始化了一个默认的client,并没有配置一些请求的设置

	//可以通过client中transport的Dail函数,在自定义Dail函数里面设置建立连接超时时长和发送接受数据超时
	client := &http.Client{
		Transport: &http.Transport{
			Dial: func(netw, addr string) (net.Conn, error) {
				conn, err := net.DialTimeout(netw, addr, time.Second*3) //设置建立连接超时
				if err != nil {
					return nil, err
				}
				conn.SetDeadline(time.Now().Add(time.Second * 3)) //设置发送接受数据超时
				return conn, nil
			},
			ResponseHeaderTimeout: time.Second * 3,
		},
	}

	// 如果需要添加HEADER, 要用下边这段
	// reqest, err := http.NewRequest("POST", url, strings.NewReader(param[3])) //提交请求;用指定的方法,网址,可选的主体放回一个新的*Request
	//reqest.Header.Set("Content-Type", "application/x-www-form-urlencoded")//application/json
	// if err != nil {
	// 	return nil, err
	// }
	//response, err := client.Do(reqest)//.PostForm(url, data) // .Do(reqest) //前面预处理一些参数,状态,Do执行发送;处理返回结果;Do:发送请求,
	var err error
	var response *http.Response
	if param[2] == "POST" {
		response, err = client.Post(param[0], param[1], strings.NewReader(param[3]))
	} else if param[2] == "GET" {
		response, err = client.Get(param[0])
	} else {
		return nil, errors.New("unsupport method")
	}
	if err != nil {
		return nil, err
	}
	defer response.Body.Close()
	//_, err = io.Copy(stdout, response.Body) //将第二个参数拷贝到第一个参数,直到第二参数到达EOF或发生错误,返回拷贝的字节后遇到的第一个错误.
	if response.StatusCode == 200 { //获取返回状态码,正常是200
		return ioutil.ReadAll(response.Body)
	}
	return nil, errors.New("status code error")
}

评论

首页 - Wiki
Copyright © 2011-2024 iteam. Current version is 2.138.0. UTC+08:00, 2024-12-22 11:34
浙ICP备14020137号-1 $访客地图$