0

0

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

P粉602998670

P粉602998670

发布时间: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() // 关键!

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()

body, _ := io.ReadAll(resp.Body) fmt.Println(string(body))

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

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

如此AI员工
如此AI员工

国内首个全链路营销获客AI Agent

下载
  • Timeout字段只控制整个请求生命周期(DNS + 连接 + 写请求 + 读响应),不是单独的连接超时
  • 若要细粒度控制(如连接超时500ms、读超时2s),得用http.Transport配置DialContextResponseHeaderTimeout
  • 设置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")

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客户端。这两点不解决,其他功能再全也没用。

相关专题

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

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

417

2023.08.07

json是什么
json是什么

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

533

2023.08.23

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

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

310

2023.10.13

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

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

75

2025.09.10

string转int
string转int

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

338

2023.08.02

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

757

2023.08.22

cookie
cookie

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

6422

2023.06.30

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

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

345

2023.11.23

Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

1

2026.01.22

热门下载

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

精品课程

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

共101课时 | 8.4万人学习

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

共39课时 | 3.2万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号