golang原生http包实现各种情况的get请求方式

 更新时间:2024年08月08日 14:55:43   作者:千年恨  
这篇文章主要介绍了golang原生http包实现各种情况的get请求方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

go http get 总结

请求地址

var (
	requestGetURLNoParams string = "http://httpbin.org/get"
	requestGetURL         string = "http://httpbin.org/get?a=a&b=b&c=ccc"
	imageURL              string = "http://httpbin.org/image"
)

普通get请求

// 基本get请求
func basicGet() {
	resp, err := http.Get(requestGetURLNoParams)
	if err != nil {
		log.Println("err")
	}
	defer resp.Body.Close()

	b, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Println("err")
	}
	fmt.Println(string(b))
}

请求参数放到url.Values{}

// get请求参数放到 "net/url"
func basicGetURLParams() {
	params := url.Values{}
	parseURL, err := url.Parse(requestGetURLNoParams)
	if err != nil {
		log.Println("err")
	}
	params.Set("aaa", "aaa")
	params.Set("age", "23")
	//如果参数中有中文参数,这个方法会进行URLEncode
	parseURL.RawQuery = params.Encode()
	urlPathWithParams := parseURL.String()
	resp, err := http.Get(urlPathWithParams)
	if err != nil {
		log.Println("err")
	}
	defer resp.Body.Close()

	b, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Println("err")
	}
	fmt.Println(string(b))
}

自定义请求(添加头、cookie)

// 可以设置请求头 添加cookie
func basicGetHeader() {
	client := http.Client{}
	req, err := http.NewRequest(http.MethodGet, requestGetURLNoParams, nil)
	if err != nil {
		log.Println("err")
	}
	// 添加请求头
	req.Header.Add("Content-type", "application/json;charset=utf-8")
	req.Header.Add("header", "header😂😂")
	// 添加cookie
	cookie1 := &http.Cookie{
		Name:  "aaa",
		Value: "aaa-value",
	}
	req.AddCookie(cookie1)
	// 发送请求
	resp, err := client.Do(req)
	if err != nil {
		log.Println("err")
	}
	defer resp.Body.Close()

	b, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Println("err")
	}
	fmt.Println(string(b))
}

接收文件–ioutil.WriteFile

// ioutil.ReadAll(resp.Body) 先将所有的响应读出来放到内存中。如果文件太大,那么就会消耗很多内存
func basicGetDownloadFile() {
	client := http.Client{}
	req, err := http.NewRequest(http.MethodGet, imageURL, nil) // strings.NewReader(data)
	if err != nil {
		log.Println("err")
	}
	resp, err := client.Do(req)
	if err != nil {
		log.Println("err")
	}
	defer resp.Body.Close()

	b, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Println("err")
	}
	ioutil.WriteFile("./images/img.jpg", b, 0644)
}

接收文件–io.Copy

// io.Copy() 省去了先把内容读取到内存,然后将内存中的内容写到文件
func basicGetDownloadFileIoCopy() {
	client := http.Client{}
	req, err := http.NewRequest(http.MethodGet, imageURL, nil)
	if err != nil {
		log.Println("err")
	}
	resp, err := client.Do(req)
	if err != nil {
		log.Println("err")
	}
	defer resp.Body.Close()

	// 创建一个文件用于保存
	dest, err := os.Create("./images/img.jpg")
	if err != nil {
		log.Println("err")
	}
	defer dest.Close()

	// 然后将响应流和文件流对接起来
	_, err = io.Copy(dest, resp.Body)
	if err != nil {
		log.Println("err")
	}
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Go 标准库增加metrics指标探讨分析

    Go 标准库增加metrics指标探讨分析

    go中有一个神奇的标准库 runtime/metrics,提供了一系列预定义好的 Go 自身的相关指标,如果没有编写过基础监控库或者关注的比较少的朋友可能会没接触到这类指标,本文展开现有metrics 指标,并结合现有的社区讨论一起看看还有没有必要增加更多的标准库指标
    2023-10-10
  • Golang结合ip2region实现ip归属地查询

    Golang结合ip2region实现ip归属地查询

    ip2region - 是一个离线IP地址定位库和IP定位数据管理框架,提供了众多主流编程语言的 xdb 数据生成和查询客户端实现,下面我们就来看看Golang如何结合ip2region实现ip归属地查询吧
    2024-03-03
  • Go到底能不能实现安全的双检锁(推荐)

    Go到底能不能实现安全的双检锁(推荐)

    这篇文章主要介绍了Go到底能不能实现安全的双检锁,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • go build和go install的区别介绍

    go build和go install的区别介绍

    这篇文章主要介绍了go build和go install的区别介绍,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • 定位并修复 Go 中的内存泄露问题

    定位并修复 Go 中的内存泄露问题

    Go 是一门带 GC 的语言,这篇文章回顾了我如何发现内存泄漏、如何修复它,以及我如何修复 Google 示例 Go 代码中的类似问题,以及我们如何改进我们的库以防止将来发生这种情况,感兴趣的朋友一起看看吧
    2021-10-10
  • Golang 锁原理的简单实现

    Golang 锁原理的简单实现

    本文主要介绍了Golang 锁原理的简单实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Go网络编程TCP抓包实操示例探究

    Go网络编程TCP抓包实操示例探究

    作为一名软件开发者,网络编程是必备知识,本文通过 Go 语言实现 TCP 套接字编程,并结合 tcpdump 工具,展示它的三次握手、数据传输以及四次挥手的过程,帮助读者更好地理解 TCP 协议与 Go 网络编程
    2024-01-01
  • 详解Go语言如何使用xorm实现读取mysql

    详解Go语言如何使用xorm实现读取mysql

    xorm是go语言的常用orm之一,可以用来操作数据库。本文就来和大家聊聊Go语言如何使用xorm实现读取mysql功能,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-11-11
  • Golang 正则匹配效率详解

    Golang 正则匹配效率详解

    这篇文章主要介绍了Golang 正则匹配效率详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Golang使用Consul详解

    Golang使用Consul详解

    Consul是一个服务发现软件, 提供了服务发现\键值存储\健康检查等功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06

最新评论