脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Golang - golang如何用http.NewRequest创建get和post请求

golang如何用http.NewRequest创建get和post请求

2024-03-28 11:10北漂燕郊杨哥 Golang

这篇文章主要介绍了golang如何用http.NewRequest创建get和post请求问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

golang用http.NewRequest创建get和post请求

在Go语言中,使用http.NewRequest函数可以创建GET和POST请求。

下面是一个示例代码,演示如何使用http.NewRequest创建GET和POST请求:

package main

import (
 "fmt"
 "io/ioutil"
 "net/http"
)

func main() {
 // 创建GET请求
 getRequest, err := http.NewRequest("GET", "https://api.example.com/data", nil)
 if err != nil {
 fmt.Println("创建GET请求失败:", err)
 return
 }

 // 发送GET请求并获取响应
 client := &http.Client{}
 getResponse, err := client.Do(getRequest)
 if err != nil {
 fmt.Println("发送GET请求失败:", err)
 return
 }
 defer getResponse.Body.Close()

 // 读取GET响应的内容
 getResponseBody, err := ioutil.ReadAll(getResponse.Body)
 if err != nil {
 fmt.Println("读取GET响应失败:", err)
 return
 }

 // 打印GET响应的内容
 fmt.Println(string(getResponseBody))

 // 创建POST请求
 postData := []byte(`{"key1": "value1", "key2": "value2"}`)
 postRequest, err := http.NewRequest("POST", "https://api.example.com/data", bytes.NewBuffer(postData))
 if err != nil {
 fmt.Println("创建POST请求失败:", err)
 return
 }
 postRequest.Header.Set("Content-Type", "application/json") // 设置请求头,指定内容类型为JSON

 // 发送POST请求并获取响应
 postResponse, err := client.Do(postRequest)
 if err != nil {
 fmt.Println("发送POST请求失败:", err)
 return
 }
 defer postResponse.Body.Close()

 // 读取POST响应的内容
 postResponseBody, err := ioutil.ReadAll(postResponse.Body)
 if err != nil {
 fmt.Println("读取POST响应失败:", err)
 return
 }

 // 打印POST响应的内容
 fmt.Println(string(postResponseBody))
}

在上述示例中,我们首先创建了一个GET请求,指定了请求的URL为"https://api.example.com/data"。

然后,我们使用http.Client类型的客户端发送该请求,并获取响应。

对于POST请求,我们创建了一个包含JSON数据的请求主体,并设置了请求头的"Content-Type"字段为"application/json"。

然后,我们使用相同的客户端发送该请求,并获取响应。

最后,我们读取并打印了GET和POST响应的内容。

go post 调用http.NewRequest出现错误:400 bad request踩坑

问题

使用go语言的http.NewRequest函数调用接口,该函数可带有post参数

但是一直出现错误:400 bad request

看网上解决都是说输入格式等问题,但是查询json结构体等信息并无错误。

解决

问题出在这条语句:

req, err := http.NewRequest("Post", url, bytes.NewBuffer(data))

第一个参数method真正的参数应该是POST,都是大写。

这很坑,或者说很容易忽略这个问题,如果不小心写错的话,一般不会把问题考虑到这,而是疯狂去看json格式是否符合,那么问题就得很久才能解决了。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/itopit/article/details/135081628

延伸 · 阅读

精彩推荐
  • GolanggoFrame的gqueue与channe的区别

    goFrame的gqueue与channe的区别

    这篇文章主要介绍了goFrame的gqueue与channe的区别,channel的作用是用于go协程间的通信,goroutine和channel是支持高并发的重要组成部分,更多两者详细介绍需要...

    王中阳Go11932022-10-14
  • GolangGo语言设置JSON的默认值操作

    Go语言设置JSON的默认值操作

    这篇文章主要介绍了Go语言设置JSON的默认值操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    小人物大青春7862021-03-22
  • Golang简单聊聊Go for range中容易踩的坑

    简单聊聊Go for range中容易踩的坑

    for循环问题,在面试中经常都会被问到,并且在实际业务项目中也经常用到for循环,要是没用好,一不下心就掉坑,本文就来讲讲Go for range中容易踩的坑吧...

    劲仔Go&王中阳Go11192023-03-21
  • Golanggo code review 代码调试

    go code review 代码调试

    这篇文章主要为大家介绍了go code review 代码调试方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    洛天枫8712022-12-02
  • Golang17个开源的Go语言博客和CMS解决方案

    17个开源的Go语言博客和CMS解决方案

    Go语言,也称为Golang,是一种为构建高效、可靠和可扩展软件而设计的开源编程语言。它于2007年在Google开发,现在广泛用于开发Web应用程序、网络工具和系...

    技术的游戏8202023-11-06
  • Golanggolang利用unsafe操作未导出变量-Pointer使用详解

    golang利用unsafe操作未导出变量-Pointer使用详解

    这篇文章主要给大家介绍了关于golang利用unsafe操作未导出变量-Pointer使用的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面...

    豆瓣奶茶3432020-05-17
  • Golanggoland -sync/atomic原子操作小结

    goland -sync/atomic原子操作小结

    这篇文章主要介绍了goland -sync/atomic原子操作,原子操作能够保证执行期间是连续且不会被中断(变量不会被其他修改,mutex可能存在被其他修改的情况),本文给...

    Jeff的技术栈7892022-11-08
  • GolangGolang gRPC HTTP协议转换示例

    Golang gRPC HTTP协议转换示例

    这篇文章主要为大家介绍了Golang gRPC HTTP协议转换示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    Coldstar12132022-10-21