Golang如何使用net/http发送HTTP请求_Golang HTTP Client请求操作实践


Go语言使用net/http包实现HTTP请求,首先通过http.Get发送GET请求并检查StatusCode,再用http.Post或http.NewRequest发送POST请求,后者可自定义Header;需设置http.Client的Timeout或Transport控制超时,手动实现重试机制;每次请求后必须defer resp.Body.Close()释放资源,大文件应流式处理以避免内存溢出。

golang如何使用net/http发送http请求_golang http client请求操作实践

Go语言的net/http包提供了简洁而强大的HTTP客户端功能,适合大多数网络请求场景。使用http.Client可以轻松发送GET、POST等请求,并灵活控制超时、Header、Cookie等参数。下面介绍常见用法和最佳实践。

发送GET请求

最简单的HTTP请求是GET,用于获取资源。可以直接使用http.Get快捷方法。

示例:

resp, err := http.Get("https://api.example.com/data")
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close()
<p>body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))

注意:无论响应状态码是否为2xx,只要网络通信成功,err就为nil。需手动判断resp.StatusCode

发送POST请求

发送数据通常使用POST。可以用http.Post或构造http.Request来实现更精细控制。

立即学习“go语言免费学习笔记(深入)”;

发送JSON数据示例:

data := map[string]string{"name": "Alice"}
jsonData, _ := json.Marshal(data)
<p>resp, err := http.Post("<a href="https://www.php.cn/link/93a819cbd635bd1505ef0f804c21cc2a">https://www.php.cn/link/93a819cbd635bd1505ef0f804c21cc2a</a>", "application/json", bytes.NewBuffer(jsonData))
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()

若需自定义Header(如添加Authorization),应使用http.NewRequest

req, _ := http.NewRequest("POST", "https://www.php.cn/link/93a819cbd635bd1505ef0f804c21cc2a", bytes.NewBuffer(jsonData))
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer token123")
<p>client := &http.Client{}
resp, err := client.Do(req)

设置超时与重试机制

生产环境中必须设置超时,避免请求长时间挂起。通过自定义http.Client配置。

QoQo QoQo

QoQo是一款专注于UX设计的AI工具,可以帮助UX设计师生成用户角色卡片、用户旅程图、用户访谈问卷等。

QoQo 172 查看详情 QoQo

client := &http.Client{
    Timeout: 10 * time.Second, // 整个请求的最大超时
}

更细粒度控制可使用Transport,例如分别设置连接、读写超时:

transport := &http.Transport{
    DialContext: (&net.Dialer{
        Timeout:   5 * time.Second,
        KeepAlive: 30 * time.Second,
    }).DialContext,
    TLSHandshakeTimeout:   5 * time.Second,
    ResponseHeaderTimeout: 5 * time.Second,
    IdleConnTimeout:       60 * time.Second,
}
<p>client := &http.Client{
Transport: transport,
Timeout:   15 * time.Second,
}

重试逻辑需自行实现,可在Do失败后根据错误类型或状态码进行有限次数重试。

处理响应与资源释放

每次请求后必须调用resp.Body.Close(),否则会造成连接泄漏。即使出错也要确保关闭。

推荐使用defer resp.Body.Close()。如果需要多次读取Body内容,可先缓存:

body, err := io.ReadAll(resp.Body)
if err != nil {
    log.Fatal(err)
}
// 此时Body已关闭,后续可用body变量
fmt.Println(string(body))

对于大文件下载,建议流式处理,避免内存溢出。

基本上就这些。掌握net/http的基础用法后,可封装通用Client结构体,提升代码复用性和可维护性。

以上就是Golang如何使用net/http发送HTTP请求_Golang HTTP Client请求操作实践的详细内容,更多请关注其它相关文章!


# json  # go  # cookie  # js  # 资源管理  # 泉州做seo优化  # 营销酒店推广  # 三明抖音关键词排名推广  # 如何在  # 也要  # 大文件  # 流式  # 复用  # 如何使用  # 自定义  # 重试  # 加载  # 代码复用  # 状态码  # app  # go语言  # golang  # 推广营销计划  # 烟台网络推广营销方案  # 潍坊电商网站建设方案  # 徐汇区机构营销推广  # 电器网站seo优化哪家专业  # 长沙县网站建设软件  # 博士能望远镜推广网站 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 《深林》冬季章节图文攻略  CodeIgniter 3 中基于 MySQL 数据高效生成动态图表教程  VS Code源代码管理(SCM)视图的进阶使用技巧  《理想汽车》权限管理设置方法  《百果园》充值余额方法  J*aScript 数值去小数位处理:多种方法与实践  PHP中动态类名访问的类实例类型提示与静态分析实践  Sublime Text怎么关闭自动完成_Sublime禁用Auto Complete设置  虫虫助手如何更新游戏  《via浏览器》强制缩放网页设置方法  传统曲艺莲花落的表演形式是  Lar*el 中高效执行多列更新:单次查询实现  优化 React onClick 事件处理:函数引用与箭头函数的对比  邮编号码查询app有哪些_邮编号码查询推荐app及使用体验  利用Flexbox实现图片元素的二维布局:2x2网格排列指南  解决PHP MySQL数据库更新无响应:SQL查询语法错误解析  Mac怎么关闭按键声音_Mac键盘打字音效设置  人教版电子教材在线获取指南  Lar*el 关联查询:同时筛选父表与子表数据的高效策略  Flask 应用中图片动态更新与上传:实现客户端定时刷新与服务器端文件管理  广州地铁app准妈咪徽章领取方法  word文档中的分隔符有哪些不同类型和用途_Word分隔符类型与用途方法  处理含命名空间的XML文件 Power Query中的高级技巧  微信客户端怎么查看二维码_微信客户端个人二维码查看方法  VS Code的时间线(Timeline)视图:您的代码时光机  Symfony路由参数转换器:实体存在性验证与错误处理策略  ExcelSCAN与LAMBDA如何创建自定义移动平均函数_SCAN实现任意窗口期移动平均计算  word邮件合并怎么插入个性化图片_Word邮件合并插入个性化图片方法  汽水音乐在线入口 汽水音乐网页端官方页面快速打开  J*a中逻辑运算符如何使用_逻辑与或非的基础用法讲解  263企业邮箱如何设置邮件转发功能  钉钉任务无法提醒如何处理 钉钉任务提醒优化方法  J*a里如何处理ArithmeticException并防止除零_算术异常防护策略解析  键盘保修需要什么_键盘售后维修流程  植物大战僵尸95版游戏版下载_植物大战僵尸95版游戏版安装指南  AO3永久镜像入口开放_AO3最新网址兼容所有浏览器  Composer reinstall命令重装损坏的包  苹果11如何更换iCloud账号_苹果11账号切换的具体步骤  实现可重用自定义Python Range类  在VS Code中进行数据科学和机器学习开发  百度地图离线地图无法加载如何解决 百度地图离线地图加载优化方法  智学网成绩单查询系统网_智学网学生平台登录  抄漫画官网防走失地址_抄漫画最新漫画完整版阅读入口  b站网页版入口 哔哩哔哩官方网站直接进入  c++20的指定初始化(Designated Initializers)怎么用_c++ C风格结构体初始化  126邮箱申请入口官网_126邮箱注册免费登录2025  PHP odbc_fetch_array 返回值处理:如何正确访问嵌套数组元素  Linux如何自动分析系统异常日志_Linux日志智能检测  抖音号怎么解除企业认证改成个人?改成个人有影响吗?  《东方航空》添加乘机人方法 

 2025-12-16

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.