Go http 库
http
是Go语言的标准库之一,可以使用它创建http服务,同时它也提供http客户端功能。
简单的实例
package main
import (
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
w.Write([]byte("Hello Golang!"))
})
http.ListenAndServe(":8080", nil)
}
文件服务器
func main() {
os.Mkdir("file", 0777)
http.Handle("/file/", http.StripPrefix("/file/", http.FileServer(http.Dir("file"))))
http.ListenAndServe(":8080", nil)
}
注:浏览器缓存可能会显示不一致
自定义http配置
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
w.Write([]byte("Done!"))
})
s := &http.Server{
Addr: ":8080",
Handler: mux,
ReadTimeout: time.Second * 3,
WriteTimeout: time.Second * 3,
MaxHeaderBytes: 1 << 20,
}
s.ListenAndServe()
}
http client
GET
package main
import (
"fmt"
"log"
"io/ioutil"
"net/http"
)
func main() {
req, err := http.Get("https://www.baidu.com")
if err != nil {
log.Fatal(err.Error())
}
defer req.Body.Close()
body, err := ioutil.ReadAll(req.Body)
if err != nil {
log.Fatal(err.Error())
}
fmt.Println(string(body))
}
POST
func main() {
// @url:
// @content-type:
// @io.Reader:
req, err := http.Post("https://www.baidu.com", "application/x-www-form-urlencode",
strings.NewReader("name=xxx"))
if err != nil {
log.Fatal(err.Error())
}
defer req.Body.Close()
body, err := ioutil.ReadAll(req.Body)
if err != nil {
log.Fatal(err.Error())
}
fmt.Println(string(body))
}
表单提交
func main() {
req, err := http.PostForm("https://www.baidu.com", url.Values{
"name": {"xxx"},
"email": {"xxx@qq.com"},
})
if err != nil {
log.Fatal(err.Error())
}
defer req.Body.Close()
body, err := ioutil.ReadAll(req.Body)
if err != nil {
log.Fatal(err.Error())
}
fmt.Println(string(body))
}
复杂请求
package main
import (
"crypto/tls"
"crypto/x509"
"fmt"
"github.com/gpmgo/gopm/modules/log"
"io/ioutil"
"net/http"
"net/url"
"strings"
"time"
)
type Jar struct {
cookies []*http.Cookie
}
func (jar *Jar) SetCookies(u *url.URL, cookies []*http.Cookie) {
jar.cookies = cookies
}
func (jar *Jar) Cookies(u *url.URL) []*http.Cookie {
return jar.cookies
}
func main() {
//x509.Certificate.
pool := x509.NewCertPool()
//caCertPath := "etcdcerts/ca.crt"
caCertPath := "certs/cert_server/ca.crt"
caCrt, err := ioutil.ReadFile(caCertPath)
if err != nil {
fmt.Println("ReadFile err:", err)
return
}
pool.AppendCertsFromPEM(caCrt)
//pool.AddCert(caCrt)
tr := &http.Transport{
TLSClientConfig: &tls.Config{RootCAs: pool},
DisableCompression: true,
}
client := &http.Client{
Transport: tr,
CheckRedirect: nil,
Jar: new(Jar),
Timeout: time.Second * 3,
}
req, err := http.NewRequest("POST", "https://www.baidu.com", strings.NewReader("name=xxx"))
if err != nil {
log.Fatal(err.Error())
}
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
req.SetBasicAuth("admin", "123456")
resp, err := client.Do(req)
if err != nil {
log.Fatal(err.Error())
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err.Error())
}
fmt.Println(string(body))
}
Last updated
Was this helpful?