Go 学习笔记1 - 通过http包发送网络请求

概述

http 包 提供了 HTTP 客户端实现,和服务端的实现。
通过 http 包,我们可以发送网络请求,get, post 等。

发送 Get,Post,Head

构建 get , 方法,很简单,示例:

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

上传图片

resp, err := http.Post("h ttp://example.com/upload", "image/jpeg", &buf)

在使用完毕后,记得一定要关闭,像下面这样:

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

控制 http客户端 的一些 header, 转发策略等其他设置,我们通过创一个 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)
// ...

控制代理的行为,TLS配置, 长连接,keep-alives,压缩,和其他配置,要创建一个 Transport,示例:

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

Clients 和 Transports 是通过 go程 的安全并发实现,高效一点的方法是:创建一个,多次重用它。

一个完整的get示例

package main

import (
  "fmt"
  "net/http"
  "io/ioutil"
)

func demoGet(){
  resp,err := http.Get("http://www.baidu.com")
  defer resp.Body.Close()
  if err != nil {
    fmt.Println("ERROR: ",err);
    return
  }
  fmt.Println(resp);

  body,_ := ioutil.ReadAll(resp.Body)
  fmt.Print(string(body))

}

func main() {
  demoGet()
}
发布了259 篇原创文章 · 获赞 7 · 访问量 9万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览