教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 7 go http接口的使用

7 go http接口的使用

发布时间:2021-12-17   编辑:jiaochengji.com
教程集为您提供7 go http接口的使用等资源,欢迎您收藏本站,我们将为您提供最新的7 go http接口的使用资源
<h2>go 实现http客户端服务端</h2>

 

<h2>1 http协议</h2>


     超文本传输协议(HTTP HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,它详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。
     HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候就成了我们常说的HTTPS。

<h2>2 go中文帮助文档</h2>

Go语言标准库文档中文版 | Go语言中文网 | Golang中文社区 | Golang中国

 

<h2>3 功能实现简介</h2>


1http包提供了HTTP客户端和服务端的实现。

Get、Head、Post和PostForm函数发出HTTP/ HTTPS请求。

resp, err := http.Get("http://example.com/")
...
resp, err := http.Post("http://example.com/upload", "image/jpeg", &buf)
...
resp, err := http.PostForm("http://example.com/form",url.Values{"key": {"Value"}, "id": {"123"}})

 

2程序在使用完回复后必须关闭回复的主体。

resp, err := http.Get("http://example.com/")
if err != nil {
    // handle error
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
// ...


3要管理HTTP客户端的头域、重定向策略和其他设置,创建一个Client:

client := &http.Client{
    CheckRedirect: redirectPolicyFunc,
}
resp, err := client.Get("http://example.com")
// ...
req, err := http.NewRequest("GET", "http://example.com", nil)
// ...
req.Header.Add("If-None-Match", `W/"wyzzy"`)
resp, err := client.Do(req)
// ...


4要管理代理、TLS配置、keep-alive、压缩和其他设置,创建一个Transport:

tr := &http.Transport{
    TLSClientConfig:    &tls.Config{RootCAs: pool},
    DisableCompression: true,
}
client := &http.Client{Transport: tr}
resp, err := client.Get("https://example.com")

Client和Transport类型都可以安全的被多个go程同时使用。出于效率考虑,应该一次建立、尽量重用。

ListenAndServe使用指定的监听地址和处理器启动一个HTTP服务端。处理器参数通常是nil,这表示采
用包变量DefaultServeMux作为处理器。Handle和HandleFunc函数可以向DefaultServeMux添加处理器。

http.Handle("/foo", fooHandler)
http.HandleFunc("/bar", func(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path))
})
log.Fatal(http.ListenAndServe(":8080", nil))

 

5要管理服务端的行为,可以创建一个自定义的Server:

s := &http.Server{
    Addr:           ":8080",
    Handler:        myHandler,
    ReadTimeout:    10 * time.Second,
    WriteTimeout:   10 * time.Second,
    MaxHeaderBytes: 1 << 20,
}
log.Fatal(s.ListenAndServe())

 

<h2>4 代码实现</h2>

1服务端

<pre><code class="language-Go">package main import ( "io" "net/http" "log" ) // w:给客户端发送数据 reg:读取客户端发送的数据 func HelloServer(w http.ResponseWriter, req *http.Request) { log.Println("r.host=",req.Host) log.Println("r remotehost",req.RemoteAddr) //.... io.WriteString(w, "hello, world!\n") } func main() { //注册处理函数,用户连接,会自动连接 http.HandleFunc("/hello", HelloServer) err := http.ListenAndServe(":8888", nil) if err != nil { log.Fatal("ListenAndServe: ", err) } /** 输出: F:\goWorkSpace\study\06通信编程\http>go run 03_http服务器.go 2020/04/25 22:38:26 r.host= 127.0.0.1:8888 2020/04/25 22:38:26 r remotehost 127.0.0.1:10421 * */ }</code></pre>

2客户端

<pre><code class="language-Go">/** http 客户端 */ package main import ( "log" "net/http" ) func main(){ resp,err:=http.Get("http://127.0.0.1:8888/hello") if err!=nil{ log.Println("http get err=",err) return } defer resp.Body.Close() log.Println("status",resp.Status) log.Println("statuscode=",resp.StatusCode) log.Println("header=",resp.Header) buf:=make([]byte,4*1024) var tem string for{ //获取请求的结果 n,err:=resp.Body.Read(buf) if n==0{ log.Println("read err=",err) break } tem =string(buf[:n]) } log.Println("get val=",tem) /** 输出 F:\goWorkSpace\study\06通信编程\http>go run 04_http客户端.go 2020/04/25 22:38:26 status 200 OK 2020/04/25 22:38:26 statuscode= 200 2020/04/25 22:38:26 header= map[Content-Length:[14] Content-Type: [text/plain; charset=utf-8] Date:[Sat, 25 Apr 2020 14:38:26 GMT]] 2020/04/25 22:38:26 read err= EOF 2020/04/25 22:38:26 get val= hello, world! */ }</code></pre>

 

到此这篇关于“7 go http接口的使用”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
go 获取函数地址_Go语言基础--接口浅析
2018年最全Go语言教程零基础入门到进阶实战视频
想系统学习GO语言(Golang
GO接口应用场景说明
Go语言接口(interface)的实现原理
Go语言空接口类型(interface{})
golang中的联合体
【Go语言入门系列】(九)写这些就是为了搞懂怎么用接口
从零开始学习GO语言-搭建Go语言开发环境-快速开发入门第一个小程序
Go语言爱好者周刊:第 78 期 — 这道关于 goroutine 的题

[关闭]
~ ~