zoukankan      html  css  js  c++  java
  • golang中net/http包的简单使用

    一、介绍

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

    Get,Head,Post和PostForm函数发出http、https的请求

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

    #简单的访问网站,由于没有添加header,访问数据不正确
    package main
    
    import (
        "fmt"
        "io/ioutil"
        "net/http"
    )
    
    func main() {
        res,err:=http.Get("https://www.baidu.com")
        if err !=nil{
            panic(err)
        }
        defer res.Body.Close()
        body, err := ioutil.ReadAll(res.Body)
        fmt.Println(string(body))
    }
    #建立的client客户端,发起的get请求,在请求体中添加header,然后使用client执行这个请求
    package main
    
    import (
        "fmt"
        "io/ioutil"
        "net/http"
    )
    
    func main() {
        client:=&http.Client{}
        res,err:=http.NewRequest("GET","https://www.baidu.com",nil)
        res.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36")
        resp,err:=client.Do(res)
        if err != nil {
            panic(err)
        }
        defer resp.Body.Close()
        body, err := ioutil.ReadAll(resp.Body)
        fmt.Println(string(body))
    }

    二、其他使用方法

    #监听ip端口,并建立一个sever,让访问者可以访问指定的文件目录
    package main
    
    import "net/http"
    
    func main() {
      //设置访问路由 http.Handle(
    "/",http.FileServer(http.Dir("./"))) http.ListenAndServe(":8080",nil) }
    package main
    
    import (
        "bufio"
        "fmt"
        "github.com/axgle/mahonia"
        "golang.org/x/net/html/charset"
        "golang.org/x/text/encoding"
        "io"
        "io/ioutil"
        "net/http"
        "strconv"
    )
    
    func main() {
        client := &http.Client{}
        request, err := http.NewRequest("GET", "http://www.baidu.com", nil)
        if err != nil {
            fmt.Println(err)
        }
        //建立cookie对象
        cookie := &http.Cookie{Name: "maple", Value: strconv.Itoa(123)}
        request.AddCookie(cookie) //向request中添加cookie
    
        //设置request的header
        request.Header.Set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3")
        request.Header.Set("Accept-Language", "zh-CN,zh;q=0.9")
        request.Header.Set("Cache-Control", "no-cache")
        request.Header.Set("Connection", "keep-alive")
    
        response, err := client.Do(request)
        if err != nil {
            fmt.Println(err)
            return
        }
        e:=determineEncoding(response.Body)
        fmt.Println("当前编码:",e)
    
        defer response.Body.Close()
        if response.StatusCode == 200 {
            r, err := ioutil.ReadAll(response.Body)
            if err != nil {
                fmt.Println(err)
            }
    
    
            //编码转换,如编码不正确可转成指定编码
            srcCoder :=mahonia.NewEncoder("utf-8")
            res:=srcCoder.ConvertString(string(r))
    
            fmt.Println(res)
        }
    }
    
    //编码检测
    func determineEncoding(r io.Reader) encoding.Encoding  {
        bytes, err := bufio.NewReader(r).Peek(1024)
        if err != nil {
            panic(err)
        }
        e, _, _ := charset.DetermineEncoding(bytes, "")
        return e
    }
  • 相关阅读:
    定制一个类似地址选择器的view
    3D版翻页公告效果
    一分钟搞定触手app主页酷炫滑动切换效果
    苹果版小黄车(ofo)app主页菜单效果
    基于SpringMVC+Ext.js的权限管理系统(无权限框架)
    使用 mybatis + flying-0.9.4 的电商后端
    iOS仿支付宝首页效果
    Android蓝牙
    JavaWeb Session详解
    原生JS实现的h5小游戏-植物大战僵尸
  • 原文地址:https://www.cnblogs.com/angelyan/p/11096545.html
Copyright © 2011-2022 走看看