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语言中数组的使用

    浅析Go语言中数组的使用

    数组用于在单个变量中存储相同类型的多个值,而不是为每个值声明单独的变量,这篇文章主要为大家介绍了Go语言中数组的简单使用,需要 的可以参考下
    2023-08-08
  • 详解Golang如何监听某个函数的开始执行和执行结束

    详解Golang如何监听某个函数的开始执行和执行结束

    这篇文章主要为大家详细介绍了Golang如何监听某个函数的开始执行和执行结束,文中的示例代码讲解详细,有需要的小伙伴可以参考一下
    2024-02-02
  • Golang实现内网穿透详解

    Golang实现内网穿透详解

    这篇文章主要为大家详细介绍了Golang实现内网穿透的相关知识,包括原理和代码实现,文中的示例代码讲解详细,有需要的小伙伴可以参考一下
    2024-11-11
  • Golang中实现JWT的高效工具包

    Golang中实现JWT的高效工具包

    本文主要介绍了Golang中实现JWT的高效工具包,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-05-05
  • Golang实现断点续传功能

    Golang实现断点续传功能

    这篇文章主要为大家详细介绍了Golang实现断点续传、复制文件功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • golang API请求队列的实现

    golang API请求队列的实现

    本文主要介绍了golang API请求队列的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • Golang中channel的原理解读(推荐)

    Golang中channel的原理解读(推荐)

    channel主要是为了实现go的并发特性,用于并发通信的,也就是在不同的协程单元goroutine之间同步通信。接下来通过本文给大家介绍Golang中channel的原理解读,感兴趣的朋友一起看看吧
    2021-10-10
  • 以Golang为例详解AST抽象语法树的原理与实现

    以Golang为例详解AST抽象语法树的原理与实现

    AST 使用树状结构来表达编程语言的结构,树中的每一个节点都表示源码中的一个结构,本文将以GO语言为例,为大家介绍一下AST抽象语法树的原理与实现,希望对大家有所帮助
    2024-01-01
  • Go语言操作MySql数据库的详细指南

    Go语言操作MySql数据库的详细指南

    数据的持久化是程序中必不可少的,所以编程语言中对数据库的操作是非常重要的一块,这篇文章主要给大家介绍了关于Go语言操作MySql数据库的相关资料,需要的朋友可以参考下
    2023-10-10
  • Go语言中的网络编程实现方式

    Go语言中的网络编程实现方式

    Go语言作为一种简洁而强大的编程语言,在网络编程方面表现尤为出色,其内置的net包提供了丰富的网络I/O基础设施,支持TCP、UDP协议,以及DNS解析等功能,本文将结合实际案例,详细介绍Go语言在网络编程中的详细用法,需要的朋友可以参考下
    2024-10-10

最新评论