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()
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值