go标准库---net/http客户端

       go的net/http标准库提供了一套完整的http请求和响应服务

       服务端部分:go标准库---net/http服务端

       今天从客户端的角度来学习分析下,受限介绍Client相关的数据结构。

1、数据结构

        (1)对应服务端,客户端也封装了一个对象,相较Server,Client的成员少一些,其中最主要的就是Transport,负责客户端请求发起到返回响应的实现。

type Client struct {
	Transport RoundTripper  //http请求的具体实现

	Jar CookieJar         // cookie

	Timeout time.Duration   //超时
}

       (2) Transport是一个RoundTripper的接口类型,该接口类型实现一个RoundTrip方法,该方法负责实现传入请求,返回请求对应的响应,是客户端请求的核心

type RoundTripper interface {
	RoundTrip(*Request) (*Response, error)
}

      (3) Request是请求的结构体,包含了请求方法、请求体、请求地址,协议等信息

type Request struct {
	Method string   //请求方法

	URL *url.URL  //请求的地址信息

	Header Header   //请求头

    Proto string // 协议

	Body io.ReadCloser //请求体

	Host string  //服务器主机

	Response *Response

    // ...

}

        (4)Response响应体,包含请求状态、协议、响应头、响应体、请求体等

type Response struct {
	StatusCode int    // 请求状态

	Proto      string // 协议

	Header Header  //相应头
 
	Body io.ReadCloser // 响应体

	Request *Request // 对应的请求体

    // ...
}

2、流程分析

        以Post请求为例,按照如下的请求函数进行梳理,如果直接调用标准库的请求函数,将使用默认的客户端实例DefaultClient,入参有路径和文本类型一级请求体参数

var DefaultClient = &Client{}

func Post(url, contentType string, body io.Reader) (resp *Response, err error) {
	return DefaultClient.Post(url, contentType, body)
}

        在Client.Post中,首先根据传入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值