Golang:发起http请求-GET带参数、POST发送Form和JSON数据

文档

  • https://pkg.go.dev/net/http
  • https://pkg.go.dev/net/url

目录

    • 1、发起GET请求
    • 2、发起带参GET请求
    • 3、POST请求提交Form表单
    • 4、POST请求提交Json数据
    • 5、接收响应数据,json转为map
    • 6、自定义请求头

1、发起GET请求

使用net/http 可以很容易发起get请求

package mainimport ("fmt""io""net/http"
)func main() {resp, _ := http.Get("https://httpbin.org/get")defer resp.Body.Close()body, _ := io.ReadAll(resp.Body)fmt.Print(string(body))
}

响应

{"args": {}, "headers": {"Accept-Encoding": "gzip", "Host": "httpbin.org", "User-Agent": "Go-http-client/2.0", "X-Amzn-Trace-Id": "Root=1-664863e9-34028ecc4c56c08d6ac5d923"}, "origin": "127.0.0.1", "url": "https://httpbin.org/get"
}

2、发起带参GET请求

使用net/url将查询参数拼接到url上,再使用net/http发起http请求

package mainimport ("fmt""io""net/http""net/url"
)func main() {targetUrl := "https://httpbin.org/get"u, _ := url.ParseRequestURI(targetUrl)// URL paramdata := url.Values{}data.Set("name", "Tom")data.Set("age", "18")u.RawQuery = data.Encode() // URL encodefmt.Println(u.String())// https://httpbin.org/get?age=18&name=Tomresp, _ := http.Get(u.String())defer resp.Body.Close()body, _ := io.ReadAll(resp.Body)fmt.Println(string(body))}

响应

{"args": {"age": "18", "name": "Tom"}, "headers": {"Accept-Encoding": "gzip", "Host": "httpbin.org", "User-Agent": "Go-http-client/2.0", "X-Amzn-Trace-Id": "Root=1-6648641d-0567278a093ee36078e9da27"}, "origin": "127.0.0.1", "url": "https://httpbin.org/get?age=18&name=Tom"
}

3、POST请求提交Form表单

package mainimport ("fmt""io""net/http""net/url"
)func main() {targetUrl := "https://httpbin.org/post"data := url.Values{}data.Set("name", "Tom")data.Set("age", "18")resp, _ := http.PostForm(targetUrl, data)defer resp.Body.Close()body, _ := io.ReadAll(resp.Body)fmt.Println(string(body))
}

响应

{"args": {}, "data": "", "files": {}, "form": {"age": "18", "name": "Tom"}, "headers": {"Accept-Encoding": "gzip", "Content-Length": "15", "Content-Type": "application/x-www-form-urlencoded", "Host": "httpbin.org", "User-Agent": "Go-http-client/2.0", "X-Amzn-Trace-Id": "Root=1-66486446-48a3d6085e91c39208746892"}, "json": null, "origin": "127.0.0.1", "url": "https://httpbin.org/post"
}

4、POST请求提交Json数据

package mainimport ("bytes""encoding/json""fmt""io""net/http"
)func main() {targetUrl := "https://httpbin.org/post"data := make(map[string]interface{})data["name"] = "Tom"data["age"] = 12respdata, _ := json.Marshal(data)resp, _ := http.Post(targetUrl, "application/json", bytes.NewReader(respdata))defer resp.Body.Close()body, _ := io.ReadAll(resp.Body)fmt.Println(string(body))}

响应

{"args": {}, "data": "{\"age\":12,\"name\":\"Tom\"}", "files": {}, "form": {}, "headers": {"Accept-Encoding": "gzip", "Content-Length": "23", "Content-Type": "application/json", "Host": "httpbin.org", "User-Agent": "Go-http-client/2.0", "X-Amzn-Trace-Id": "Root=1-6648646b-1057cc454774771009b19914"}, "json": {"age": 12, "name": "Tom"}, "origin": "127.0.0.1", "url": "https://httpbin.org/post"
}

5、接收响应数据,json转为map

package mainimport ("encoding/json""fmt""io""net/http"
)// 定义响应数据结构
type Result struct {Args    string            `json:"args"`Headers map[string]string `json:"headers"`Origin  string            `json:"origin"`Url     string            `json:"url"`
}func main() {targetUrl := "https://httpbin.org/get"resp, _ := http.Get(targetUrl)defer resp.Body.Close()body, _ := io.ReadAll(resp.Body)fmt.Println(string(body))// 接收返回的数据var ret Resultjson.Unmarshal(body, &ret)fmt.Printf("%#v\n", ret)}

响应数据json格式

{"args": {}, "headers": {"Accept-Encoding": "gzip", "Host": "httpbin.org", "User-Agent": "Go-http-client/2.0", "X-Amzn-Trace-Id": "Root=1-664854df-48710d487d9f9d97398586ac"}, "origin": "127.0.0.1", "url": "https://httpbin.org/get"
}

响应数据golang数据

main.Result{Args:"", Headers:map[string]string{"Accept-Encoding":"gzip", "Host":"httpbin.org", "User-Agent":"Go-http-client/2.0", "X-Amzn-Trace-Id":"Root=1-664854df-48710d487d9f9d97398586ac"}, Origin:"127.0.0.1", Url:"https://httpbin.org/get"
}

6、自定义请求头

通过构建 Request 对象,设置请求头属性

package mainimport ("fmt""io""net/http"
)func main() {targetUrl := "http://httpbin.org/get"client := &http.Client{}req, _ := http.NewRequest("GET", targetUrl, nil)req.Header.Add("X-Token", "123456")req.Header.Add("X-UID", "666")resp, _ := client.Do(req)defer resp.Body.Close()body, _ := io.ReadAll(resp.Body)fmt.Println(string(body))
}

响应

{"args": {}, "headers": {"Accept-Encoding": "gzip", "Host": "httpbin.org", "User-Agent": "Go-http-client/1.1", "X-Amzn-Trace-Id": "Root=1-664863a4-044bd06c4e4887d73790591a", "X-Token": "123456", "X-Uid": "666"}, "origin": "127.0.0.1""url": "http://httpbin.org/get"
}

参考: Go实现 简单http请求(get ,post) 多种请求方式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/14452.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python实现nacos服务注册和HTTP探活

如果使用nacos-sdk-python(注意适用nacos版本),需要按照下面的链接修改源码的bug https://github.com/nacos-group/nacos-sdk-python/issues/135 代码如下: import nacos import threading import socket import requests impo…

大语言模型调优SFT RLHF

模型调优 大语言模型调优是通过准备训练数据,并在已有的预训练模型上进行调优,包括 llama、千问等模型,从而可以让模型学习到私有知识或者增强模型的已有知识。因此,如果要想训练一个效果好的模型,我们就需要提供大量…

【人工智能】模型性能评估

模型性能衡量介绍 混淆矩阵 混淆矩阵(Confusion Matrix) TP(真阳性):预测为阳性,且预测正确。 TN(真阴性):预测为阴性,且预测正确。 FP(伪阳性):预测为阳性,但预测错误,又称型一误…

json文件写操作-下文

接上文json文件写操作 2.4 控制函数长度代码规范版 #include <iostream> #include <string> #include "../3rd/cJSON/cJSON.h" #include "../test_memset/include/ArrayToZero.h"using namespace std;void AddLikeObject(cJSON* interest, c…

【NumPy】关于numpy.reshape()函数,看这一篇文章就够了

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

实时检测GPU使用率nvidia-smi

nvidia-smi --query-gpuutilization.gpu --formatcsv,noheader,nounits 为了判断所有 GPU 的利用率都小于阈值&#xff0c;可以循环检查每一个 GPU 的利用率。如果所有 GPU 的利用率都低于阈值&#xff0c;则增加空闲时间计数&#xff1b;否则&#xff0c;重置空闲时间计数。 …

python文件名通常以什么结尾

python文件后缀一般有两个&#xff0c;分别是.py和.pyw。视窗用 python.exe 运行 .py&#xff0c;用 pythonw.exe 运行 .pyw 。 这纯粹是因为安装视窗版Python时&#xff0c;扩展名 .py 自动被登记为用 python.exe 运行的文件&#xff0c;而 .pyw 则被登记为用 pythonw.exe 运…

信息系统项目管理师--八大绩效域-度量绩效域

信息系统工程师的八大绩效域包括&#xff1a;干系人、团队、开发方法和生命周期、规划、项目工作、交付、度量、不确定性。 度量绩效域涉及评估项目绩效和采取应对措施相关的活动和职能。 预期目标 对项目状况充分理解数据充分、可支持决策及时采取行动&#xff0c;确保项目最…

[程序员] 最近的感悟,错误处理占大头?

根据昨天分享的一个问题&#xff0c;想到的。 在代码里&#xff0c;异常处理的代码也算是占大头&#xff0c;扑面而来的就是发生错误时怎么处理的大片代码&#xff1b;而且出现问题的概率是绝对的占大头。所以&#xff0c;异常代码出现bug的概率也在不知不觉中增加&#xff01…

linux中使用yum下载对应软件包的离线安装包

方案一&#xff08;推荐&#xff09;&#xff1a;repotrack #安装yum-utils yum -y install yum-utils #下载 ansible 全量依赖包 -p 指定下载目录 -a 指定版本 repotrack -a x86_64 -p /tmp ansible 方法二&#xff1a;yumdownloader yumdownloader 命令在软件包 yum-utils…

LeetCode刷题之HOT100之汉明距离

大家晚上好啊&#xff0c;今天几乎啥也没干&#xff0c;上个课就耽误了一下午&#xff0c;晚上来了积极性也不高&#xff0c;先完成今天的题目吧&#xff0c;请看题&#xff1a; 1、题目描述 2、逻辑分析 没有遇到过这种题目&#xff0c;想不出来有什么解法&#xff0c;看题解…

【尚品汇】开发过程记录

Mybatis-Plus返回自增的主键Id OverrideTransactional(rollbackFor Exception.class)public void saveBaseAttrInfo(BaseAttrInfo baseAttrInfo) {//1&#xff0c;平台属性信息 判断是修改还是添加if(baseAttrInfo.getId() ! null){baseAttrInfoMapper.updateById(baseAttrInf…

跟TED演讲学英文:Do schools kill creativity by Sir Ken Robinson

Do schools kill creativity? Link: https://www.ted.com/talks/sir_ken_robinson_do_schools_kill_creativity Speaker: Sir Ken Robinson Date: February 2006 文章目录 Do schools kill creativity?IntroductionVocabularySummaryTranscriptAfterword Introduction Sir…

可转债日内自动T+0交易,行情推送+策略触发+交易接口

说明 目前这个项目已编译打包,下载即可测试,直接生成多平台可执行文件&#xff0c;详见运行方法。行情部分与策略弱相关&#xff0c;拆分解耦单独作为一个项目。行情项目请移步GitHub - freevolunteer/hangqing: A股行情订阅工具&#xff0c;支持股票/可转债level2/level2数据&…

【stm32/CubeMX、HAL库】嵌入式实验六:定时器(3)|外部脉冲计数

参考&#xff1a; 【【正点原子】手把手教你学STM32CubeIDE开发】 https://www.bilibili.com/video/BV1Wp42127Cx/?p13&share_sourcecopy_web&vd_source9332b8fc5ea8d349a54c3989f6189fd3 《嵌入式系统基础与实践》刘黎明等编著&#xff0c;第九章定时器&#xff0c…

ubuntu root密码遗忘的修改办法

在Ubuntu中&#xff0c;如果你需要进入恢复模式&#xff08;Recovery Mode&#xff09;来修改用户密码&#xff0c;可以按照以下步骤进行&#xff1a; 重启计算机&#xff1a; 重新启动你的Ubuntu系统&#xff0c;等待GRUB菜单出现。 进入恢复模式&#xff1a; 如果GRUB菜单没…

Generic Segmentation Offload(GSO)

Generic Segmentation Offload汉语意思是啥&#xff1f; Generic Segmentation Offload&#xff08;GSO&#xff09;的汉语意思是“通用分段卸载”。在网络通信中&#xff0c;GSO 是一种技术&#xff0c;用于在网络栈中将较大的传输单元分段为更小的单元&#xff0c;以提高网络…

docker安装常用软件

1、potainer docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock \-v /mnt/opt/data/docker/portainer:/data \--restartalways --name portainer portainer/portainer-ce:latest 2、cloudreve docker run -d \ --name cloudreve \ -p 5212:5212 \ -…

文心智能体应用示例:职场反PUA专家的诞生

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

C#编程-.NET Framework使用工具类简化对象之间的属性复制和操作

在C#编程中&#xff0c;对象之间的属性复制和操作是一个常见的需求。为此&#xff0c;.NET Framework提供了多种实用工具库&#xff0c;如AutoMapper、ValueInjecter和ExpressMapper。这些库通过简化代码&#xff0c;提高了开发效率。本文将介绍这些工具库&#xff0c;比较它们…