Go Http

Go HTTP库

概述

使用方法:import “net/http”
功能:实现HTTP协议的客户端和服务器

type Client

type Request

type Request struct {
    Method string //请求方法,例如Post
    URL *url.URL //url
    Proto   string // "HTTP/1.0"
    Header Header //请求头
    Body io.ReadCloser //请求主体
    ...
}

Request代表从客户端发送的一个请求,将被服务器所接收。常用方法

//新建一个request,参数表示请求方法、url和内容。
func NewRequest(method, urlStr string, body io.Reader) (*Request, error)
//读取一个request,解析出HTTP请求
func ReadRequest(b *bufio.Reader) (req *Request, err error)

type Response

type Response struct {
    Status string //返回状态
    Status int   //同上
    Header Header
    Body io.ReadCloser
    ContentLength int64 //返回的内容长度
    ...
}

Response结构体用来实现HTTP请求的回复。它的零值(DefaultClient)是一个可用的使用DefaultTransport的客户端。常用方法:

//从r读取并返回一个HTTP 回复。req参数是可选的,指定该回复对应的请求
func ReadResponse(r *bufio.Reader, req *Request) (*Response, error)

type Client

Client代表HTTP的客户端。常用方法:

//Client发起一个HTTP请求,返回一个Response
func (c *Client) Do(req *Request) (resp *Response, err error)

//以下三个函数表示发起一个Head、Get和Post请求
func (c *Client) Head(url string) (resp *Response, err error)
func (c *Client) Get(url string) (resp *Response, err error)
func (c *Client) Post(url string, bodyType string, body io.Reader) (resp *Response, err error)

type Handler

type Handler interface {
    ServeHTTP(ResponseWriter, *Request)
}

实现了Handler接口的对象可以注册到HTTP服务端,为特定的路径及其子树提供服务。

type Server

type Server struct {
    Addr           string        // 监听的TCP地址,如果为空字符串会使用":http"
    Handler        Handler       // 调用的处理器,如为nil会调用http.DefaultServeMux
    ReadTimeout    time.Duration // 请求的读取操作在超时前的最大持续时间
    WriteTimeout   time.Duration // 回复的写入操作在超时前的最大持续时间
    MaxHeaderBytes int           // 请求的头域最大长度,如为0为DefaultMaxHeaderBytes
    ...
}

Server用来实现HTTP服务器。Server的零值是合法的配置。常用方法:

//SetKeepAlivesEnabled控制是否允许HTTP闲置连接重用(keep-alive)功能。默认该功能总是被启用的。只有资源非常紧张的环境或者服务端在关闭进程中时,才应该关闭该功能。
func (s *Server) SetKeepAlivesEnabled(v bool)

//Serve会接手监听器收到的每一个连接,并为每一个连接创建一个新的服务go程。该go程会读取请求,然后调用srv.Handler回复请求。
func (srv *Server) Serve(l net.Listener) error

其他函数

func Get(url string) (resp *Response, err error)

Get向指定的URL发出一个GET请求,同理还有func Post、func Head

func Handle(pattern string, handler Handler)

Handle注册HTTP处理器handler和对应的模式pattern(注册到DefaultServeMux)

func HandleFunc(pattern string, handler func(ResponseWriter, *Request))

HandleFunc注册一个处理器函数handler和对应的模式pattern(注册到DefaultServeMux)。ServeMux的文档解释了模式的匹配机制。

func ListenAndServe(addr string, handler Handler) error

ListenAndServe监听TCP地址addr,并且会使用handler参数调用Serve函数处理接收到的连接。

简单的例子

//发起HTTP请求
func httpDo() {
    client := &http.Client{}

    req, err := http.NewRequest("POST", "http://127.0.0.1:12345/hello", strings.NewReader("name=cjb"))
    if err != nil {
        // handle error
    }

    req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
    //发起请求
    resp, err := client.Do(req)

    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        // handle error
    }

    fmt.Println(string(body))
}

//HTTP服务器
package main
import (
    "io"
    "net/http"
    "log"
)
// hello world, the web server
func HelloServer(w http.ResponseWriter, req *http.Request) {
    io.WriteString(w, "hello, world!\n")
}
func main() {
    http.HandleFunc("/hello", HelloServer)
    err := http.ListenAndServe(":12345", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值