讲师中心 微信公众号
AI工具推荐 视频效率加速

Go如何发起GET与POST请求_net http请求示例解析

轻敏吖_1371

轻敏吖_1371

发布时间:2026-01-22 12:57:16

|

965人浏览过

|

来源于php中文网

原创

最简GET请求用http.Get,但需手动Close响应体并检查状态码;POST表单用http.PostForm;超时等高级配置必须用自定义http.Client;POST JSON需设Content-Type并用strings.NewReader。

go如何发起get与post请求_net http请求示例解析

Go用http.Get发GET请求最简写法

直接调用http.Get就能发起无头信息、无超时控制的GET请求,适合快速测试或内部简单调用。但它默认不设超时,生产环境容易卡死。

  • 必须手动调用resp.Body.Close(),否则连接不会释放,会触发too many open files
  • 响应状态码需自行检查:if resp.StatusCode != http.StatusOK
  • 响应体要读完才能复用底层TCP连接,建议用io.ReadAll(resp.Body)而非只读前几字节
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.Printf("status: %d, body: %s", resp.StatusCode, string(body))

POST表单数据用http.PostForm最省事

提交application/x-www-form-urlencoded数据(比如登录表单)时,http.PostForm自动设置Header、编码参数,比手拼bytes.NewReader更安全。

  • 第二个参数是url.Values,不是普通map:用url.Values{"key": []string{"value"}}构造
  • 它内部调用http.DefaultClient.Do,仍无超时;如需控制超时,请跳到下节用自定义Client
  • 返回的*http.Response同样要Close(),规则和GET一致
data := url.Values{"username": []string{"admin"}, "password": []string{"123"}}
resp, err := http.PostForm("https://httpbin.org/post", data)
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close()
<p>body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))

需要超时/重试/自定义Header?必须用http.Client

http.Get和http.PostForm只是http.DefaultClient的快捷封装。一旦涉及超时、重定向控制、Cookie管理或自定义User-Agent,就得显式构造http.Client。

Word 文档生成与编辑
Word 文档生成与编辑

需要创建、读取、编辑或处理 Word 文档(.docx / .dotx)时使用。触发词:'Word'、'word 文档'、'.docx'、'生成报告'、'制作合同/简历/方案/说明书'、'提取 word 内容'、'在文档里查找替换'、'给文档加页眉页脚/目录/表格'。也用于把任意内容排版成一份正式的 Word 文件。不要用它处理 PDF、Excel 或无关编程任务。中文创作场景尤其适合:小说大纲稿、投稿文档、合同、简历、工作总结。

下载
  • Timeout字段只控制整个请求生命周期(DNS + 连接 + 写请求 + 读响应),不是单独的连接超时
  • 若要细粒度控制(如连接超时500ms、读超时2s),得用http.Transport配置DialContext和ResponseHeaderTimeout
  • 设置Client.CheckRedirect可拦截并修改重定向行为,避免被302带到不可信域名
client := &http.Client{
    Timeout: 5 * time.Second,
}
req, _ := http.NewRequest("POST", "https://httpbin.org/post", strings.NewReader(`{"name":"go"}`))
req.Header.Set("Content-Type", "application/json")
req.Header.Set("User-Agent", "MyApp/1.0")
<p>resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()

POST JSON别忘设Content-Type且用strings.NewReader

Go的http.Post函数第三个参数是io.Reader,不能直接传string或[]byte——它不会自动帮你转成Reader。常见错误是写http.Post(url, "application/json", []byte(jsonStr)),这会编译失败。

  • 正确做法:用strings.NewReader(jsonStr)或bytes.NewReader([]byte(jsonStr))
  • Content-Type必须显式设置,http.Post不会自动加;漏掉会导致后端解析为text/plain而失败
  • 如果JSON结构复杂,优先用json.Marshal生成字节流,避免手拼字符串出错
jsonStr, _ := json.Marshal(map[string]string{"msg": "hello"})
resp, err := http.Post("https://httpbin.org/post", "application/json", strings.NewReader(string(jsonStr)))
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close()

实际项目里最容易被忽略的是Body.Close()和超时配置。没关Body,压测时QPS上不去还报错;没设超时,上游服务卡住就拖垮整个HTTP客户端。这两点不解决,其他功能再全也没用。

热门AI工具

更多
立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2275

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3662

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1216

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

4219

2025.09.10

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

7159

2023.08.02

cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

12619

2023.06.30

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1286

2023.11.23

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

864

2024.02.23

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

20

2026.11.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 21.3万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 4.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn