go 网络请求封装

作者: 吃猫的鱼0 | 来源:发表于2018-01-04 10:55 被阅读9次

HTTP

简单demo

url := "http://www.xiaohuar.com"  //定义一个URl。
resp,err := http.Get(url) //获取url的内容。
if err != nil {//如果有异常就打印异常
    log.Fatal(err)
}
defer resp.Body.Close()  //在方法运行完后关闭连接,万要关闭链接,不然会造成资源泄露。
if resp.StatusCode != http.StatusOK{ //如果返回状出现错误,就抛出错误。
    log.Fatal(resp.Status)
}
io.Copy(os.Stdout,resp.Body) //将正常的结果输出到屏上,并不会占用内存。

一个封装好的方法

//发送请求
func fetchUrl(data interface{}, url string, method string, resu interface{}) (error) {
    var res *http.Response
    var err error
    switch method {
    case http.MethodGet:
        res, err = http.Get(url)
        if err != nil {
            return err
        }
        break
    case http.MethodPost:
        jsonBytes, err := json.Marshal(data)
        if err != nil {
            return err
        }
        bodyReader := bytes.NewBuffer(jsonBytes)
        res, err = http.Post(url, "text/xml", bodyReader)
        if err != nil {
            return err
        }
        break
    }
    Body := res.Body
    defer Body.Close()
    body, err := ioutil.ReadAll(Body)
    fmt.Println(string(body))
    if err != nil {
        return err
    }
    err = json.Unmarshal(body, resu)
    if err != nil {
        return err
    }
    return nil
}

URL

s := "http://www.xiaohuar.com"//定义地址
u,err := url.Parse(s)           //请求地址
if err != nil {//如果有异常就打印异常
    log.Fatal(err)
}
fmt.Println("使用的协议是:",u.Scheme)
fmt.Println("主机名称是:",u.Host)
fmt.Println("当前路径是:",u.Path)
fmt.Println("请求信息是:",u.RawQuery)
fmt.Println("用户信息是:",u.User)
fmt.Println("当前的锚点是:",u.Fragment)

相关文章

网友评论

    本文标题:go 网络请求封装

    本文链接:https://www.haomeiwen.com/subject/kdtrnxtx.html