Golang如何使用net/http发送HTTP请求_Golang net/http HTTP请求实践详解


答案:本文介绍Go语言net/http包的使用方法,涵盖GET请求、自定义Client发送POST等请求、表单数据提交、请求头与Cookie设置、重定向控制、超时配置及错误处理,强调资源释放与超时控制的重要性。

golang如何使用net/http发送http请求_golang net/http http请求实践详解

在Go语言中,net/http 包是处理HTTP客户端与服务器端编程的核心工具。使用它发送HTTP请求非常简单且高效,适用于构建API调用、微服务通信、Web爬虫等场景。本文将详细介绍如何使用 net/http 发送各种类型的HTTP请求,并提供实用代码示例。

1. 发送最基本的GET请求

最常用的HTTP方法是GET,用于从服务器获取数据。使用 http.Get() 可以快速发起一个GET请求。

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

注意:一定要调用 resp.Body.Close() 避免资源泄露。返回的 resp 是 *http.Response 类型,包含状态码、Header 和 Body 等信息。

2. 使用Client自定义请求(支持POST、PUT等)

对于更复杂的请求,比如POST、PUT或需要设置超时、Header等,应使用 http.Client 并手动创建 http.Request。

client := &http.Client{Timeout: 10 * time.Second}
<p>data := strings.NewReader(<code>{"name": "golang"}</code>)
req, _ := http.NewRequest("POST", "<a href="https://www.php.cn/link/dc076eb055ef5f8a60a41b6195e9f329">https://www.php.cn/link/dc076eb055ef5f8a60a41b6195e9f329</a>", data)
req.Header.Set("Content-Type", "application/json")
req.Header.Set("User-Agent", "my-app/1.0")</p><p>resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()</p><p>body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))</p>

通过 http.NewRequest 创建请求,可灵活设置方法、Body和Header。使用自定义 Client 还能控制超时、重定向策略等。

3. 发送表单数据(application/x-www-form-urlencoded)

向服务端提交表单时,常需编码为 form 格式。

form := url.Values{}
form.Add("username", "admin")
form.Add("password", "123456")
<p>req, _ := http.NewRequest("POST", "<a href="https://www.php.cn/link/dc076eb055ef5f8a60a41b6195e9f329">https://www.php.cn/link/dc076eb055ef5f8a60a41b6195e9f329</a>", 
strings.NewReader(form.Encode()))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")</p><p>resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()</p>

url.Values 提供了便捷的 form 编码功能,配合正确的 Content-Type 即可模拟登录等操作。

4. 添加请求头、Cookie与认证信息

很多API需要身份验证或特定Header。可以在 Request 对象上直接设置。

req, _ := http.NewRequest("GET", "https://api.example.com/user", nil)
req.Header.Set("Authorization", "Bearer your-token-here")
req.Header.Set("Accept", "application/json")
<p>// 添加Cookie
req.AddCookie(&http.Cookie{
Name:  "session_id",
Value: "abc123",
})</p><p>resp, _ := http.DefaultClient.Do(req)</p>
                    <div class="aritcle_card">
                        <a class="aritcle_card_img" href="/ai/764">
                            <img src="https://img.php.cn/upload/ai_manual/000/000/000/175679962212002.png" alt="芝士饼">
                        </a>
                        <div class="aritcle_card_info">
                            <a href="/ai/764">芝士饼</a>
                            <p>芝士饼是一个一站式AI原生应用开发平台,简单几步即可完成应用的创建与发布。</p>
                            <div class="">
                                <img src="/static/images/card_xiazai.png" alt="芝士饼">
                                <span>84</span>
                            </div>
                        </div>
                        <a href="/ai/764" class="aritcle_card_btn">
                            <span>查看详情</span>
                            <img src="/static/images/cardxiayige-3.png" alt="芝士饼">
                        </a>
                    </div>
                

Header 设置遵循键值对规则,Cookie 使用 AddCookie 方法添加,多个Cookie可多次调用。

5. 处理重定向与禁用自动跳转

默认情况下,Client 会自动跟随3xx重定向。如需手动控制,可自定义 Client 的 CheckRedirect 函数。

client := &http.Client{
    CheckRedirect: func(req *http.Request, via []*http.Request) error {
        return http.ErrUseLastResponse // 禁止重定向,返回最后一次请求
    },
}

这在调试或需要读取重定向响应头时非常有用。

6. 超时控制的最佳实践

生产环境中必须设置超时,避免请求长时间挂起。

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

也可以更细粒度地控制连接、读写超时,使用 http.Transport 配合 DialContext 实现。

7. 错误处理注意事项

HTTP请求可能因网络、DNS、超时、TLS等问题失败,也可能返回非200状态码。注意区分:

  • err != nil 表示请求未完成(如无法连接)
  • resp.StatusCode >= 400 属于业务层面错误,仍需读取Body
resp, err := http.Get("https://httpbin.org/status/500")
if err != nil {
    log.Fatal(err) // 网络层错误
}
// 即使返回500,err仍为nil,需单独判断状态码
if resp.StatusCode != http.StatusOK {
    fmt.Printf("server returned %d\n", resp.StatusCode)
}

基本上就这些。掌握 net/http 的基本用法后,你可以轻松实现各类HTTP交互。不复杂但容易忽略的是资源释放和超时控制,务必在实际项目中加以重视。

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


# 表单  # seo原创检查工具  # 金坛抖音seo  # 丽水搜索关键词排名费用多少  # 图标搜索衣服关键词排名  # 网站优化排名薇芯ayn陆柒玖  # seo免费优化选哪家  # 闵行网站建设原理  # 网站 建设 价格  # 佛山地产网站优化怎么做  # 药膳怎样推广及营销策略  # 你可以  # 是一个  # 的是  # 两种  # 键值  # golang  # 如何使用  # 芝士  # 自定义  # 重定向  # session  # 工具  # app  # 编码  # go语言  # cookie  # go  # json  # js  # word  # http请求 


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


相关推荐: 猫眼app抢票快还是小程序快  TikTok搜索结果不显示怎么办 TikTok搜索刷新与优化方法  win11讲述人怎么关闭 Win11屏幕朗读辅助功能禁用方法【技巧】  在React中正确处理HTML input type="number"的数值类型  为什么XML解析器对大小写敏感? 理解XML规范中的大小写规则与最佳实践  优化Leaflet弹出层图片显示:条件渲染策略  WPS长文档分栏排版不乱方法_WPS分栏+分节符报纸排版教程  《爱笔思画x》涂色教程  mail.qq.com登录入口 QQ邮箱网页版直达  中通快递官网指定查询 中通快递单号查询平台入口  解决Windows上Composer PATH变量冲突导致的命令无法识别问题  高德地图导航路线偏差报警频繁怎么办 高德地图路线偏差修复与优化方法  重返未来:1999卡戎全方位攻略  Git命令与VS Code UI操作的对应关系解析  淘口令快速解析技巧  如何定制PrimeNG Sidebar的背景颜色  firefox火狐浏览器最新官网主页_ firefox火狐浏览器平台入口直达官方链接  Win11便笺在哪打开 Win11桌面便笺(Sticky Notes)使用方法【详解】  B站怎么开|直播| B站|直播|申请需要什么条件【新手必看】  荣耀盒子应用管理技巧  咸鱼怎么设置仅粉丝可见的动态_咸鱼动态粉丝可见设置方法  J*aScript文本高亮功能优化:解决多词匹配错误与精确分割策略  PHP魔术方法__set与__isset:设计考量、性能权衡与静态分析的视角  申通快递查询 申通物流快递单实时查询入口  vivo云服务一直提示空间不足怎么办 怎么办vivo云服务老是提示空间不足  在VS Code中利用AI辅助进行代码迁移  抖音网页版地址直接进入_抖音网页版在线观看入口  word页码灰色不能用如何解决  网站体验不好=浪费钱:如何提升-用户体验效果差  《合金装备4》有望推出重制版!制作人发话了  《环球网校》设置报考省市方法  《sketchbook》选中部分图案移动方法  《下一站江湖2》独孤剑诀习得方法  《美篇》取消会员自动续费方法  猫眼电影app如何筛选支持退改签的影院_猫眼电影退改签影院筛选方法  Win10关闭UAC用户账户控制的方法 Win10降低安全提示等级【技巧】  Go App Engine 项目结构与包管理深度指南  word怎么将图片设置为页面背景并不影响打印_Word图片背景设置方法  泰拉瑞亚水晶无法放置问题  TikTok网页版实时观看入口 TikTok网页版短视频在线浏览  手机远程连接电脑方法  sublime如何处理超大文件不卡顿 _sublime打开大日志文件技巧  教育查询官方网站入口 教育个人档案查询免费官网  《大周列国志》皇帝律令功能介绍  高德地图怎么查看未来行程规划_高德地图未来行程规划查看方法  在PySimpleGUI中实现键盘按键绑定按钮事件  《图怪兽》退出登录方法  狙击外星人小游戏在线链接_狙击外星人小游戏网页链接  AffinityDesigner图层蒙版怎么用_AffinityDesigner图层蒙版设计应用  如何解决Casbin日志与应用日志不统一的问题,使用casbin/psr3-bridge实现无缝集成 

 2025-10-31

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

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

点击免费数据支持

提交您的需求,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.