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
}

 

转载于:https://www.cnblogs.com/angelyan/p/11096545.html

golang的net/http是一个非常强大的,用于创建和管理HTTPHTTPS服务器。它提供了一组用于处理HTTP请求的函数和工具,使得构建一个完整的Web应用变得非常简单和高效。 使用net/http,我们可以很容易地创建一个HTTP服务器。只需使用http提供的函数,传递一个处理函数作为参数,然后调用`http.ListenAndServe()`函数即可启动服务器。服务器会监听指定的端口,并在接收到请求时调用处理函数来处理请求。 除了创建服务器外,net/http还提供了各种工具和功能来处理HTTP请求和响应。例如,我们可以通过http提供的函数发送HTTP请求并接收响应,还可以设置请求的一些属性,如请求方法、请求头、请求体等。同时,我们也可以使用http提供的各种工具函数来解析和处理HTTP请求和响应的数据,如解析URL、解析请求体、处理cookie等。 net/http还提供了处理HTTP路由的功能,通过创建自定义的`http.Handler`来处理特定的URL或URL模式。我们可以根据请求路径的不同,将不同的处理逻辑分配给不同的处理器,从而实现功能强大且灵活的路由。 此外,net/http还具备一些安全性方面的功能,如支持HTTPS、HTTP身份验证等。我们可以通过提供证书、私钥等信息来实现HTTPS服务器,并利用http提供的各种函数和方法来进行身份验证和权限控制。 总而言之,golang的net/http是一个功能强大、易用且高效的HTTP服务器程序开发工具。它提供了各种功能和工具,使得构建和管理HTTPHTTPS服务器变得非常简单和灵活。无论是构建Web应用还是实现HTTP客户端,使用net/http都可以让我们事半功倍。 希望以上的回答能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值