golang NewRequest/gorequest实现http请求的示例代码

 更新时间:2022年08月08日 10:56:47   作者:我的猫叫土豆  
本文主要介绍了golang NewRequest/gorequest实现http请求的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

通过go语言实现http请求

http.Post

import (
    "net/http"
    "net/url"
)

data := url.Values{"start":{"100"}, "hobby":{"xxxx"}}
body := strings.NewReader(data.Encode())
resp, err := http.Post("127.0.0.1:9338", "application/x-www-form-urlencoded", body)

net/http包没有封装直接使用请求带header的get或者post方法,所以,要想请求中带header,只能使用NewRequest方法

http.NewRequest

客户端:

import (
    "net/http"
    "json"
    "ioutil"
)
type Student struct{
    id string
    name string
}

type StudentReq struct{
    id string
    name string
}
func main() {
    stu := Student{
        id:"2ed4tg5fe35fgty3yy6uh",
        name:"amber",
    }
    stu,err := json.Marshal(&stu)
    reader := bytes.NewReader(stu)
    request,err := http.NewRequest("POST", "http://192.168.1.12:8000/create", reader)
    request.Header.Set("Content-Type", "application/json")
    client:=&http.Client{}
    response,err := client.Do(request)
    defer response.Body.Close()
    body,err := ioutil.ReadAll(response.Body)
    fmt.Printf(string(body))
    
    var stuReq StudentReq 
    err = json.UnMarshal(body, &stuReq)
    fmt.Println(json.MarshalIndent(stuReq))
}

解析:

  • stu,err := json.Marshal(&stu):将stu对象改为json格式
  • reader := bytes.NewReader(stu):所以将json改为byte格式,作为body传给http请求
  • request,err := http.NewRequest(“POST”, “http://192.168.1.12:8000/create”, reader):创建url
  • response,err := client.Do(request):客户端发起请求,接收返回值
  • body,err := ioutil.ReadAll(response.Body):读取body的值,类型是byte
  • json.MarshalIndent(stuReq):修改json为标准格式

注意(坑):

1、header里的参数是Content-Type,不要写成ContentType
2、【go http: read on closed response body 】如果发送的请求是分为2个func写的,记住defer要在ioutil.ReadAll之后执行,否则报错

gorequest

这种方式适合在url里拼接参数使用param直接传递

"github.com/parnurzeal/gorequest"

func main() {
    resp, body, errs := gorequest.New().Post("http://127.0.0.1/create").Param("ip", "192.168.1.4").EndBytes()
        if errs != nil || resp.StatusCode >= 300 {
            log.Errorf("fail to call api with errors %v, %+v", errs, body)
        }
    var stuReq StudentReq 
    err = json.UnMarshal(body, &stuReq)
    fmt.Println(json.MarshalIndent(stuReq))
}

到此这篇关于golang NewRequest/gorequest实现http请求的示例代码的文章就介绍到这了,更多相关golang http请求内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • golang如何使用gomobile进行Android开发

    golang如何使用gomobile进行Android开发

    golang可以开发android,使用golang开发android需要下载安装gomobile,下面这篇文章主要给大家介绍了关于golang如何使用gomobile进行Android开发的相关资料,需要的朋友可以参考下
    2023-01-01
  • Go语言编译程序从后台运行,不出现dos窗口的操作

    Go语言编译程序从后台运行,不出现dos窗口的操作

    这篇文章主要介绍了Go语言编译程序从后台运行,不出现dos窗口的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • 浅析Go使用定时器时如何避免潜在的内存泄漏陷阱

    浅析Go使用定时器时如何避免潜在的内存泄漏陷阱

    这篇文章来和大家一起探讨一下Go 中如何高效使用 timer,特别是与select 一起使用时,如何防止潜在的内存泄漏问题,感兴趣的可以了解下
    2024-01-01
  • 解决goland 导入项目后import里的包报红问题

    解决goland 导入项目后import里的包报红问题

    这篇文章主要介绍了解决goland 导入项目后import里的包报红问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • Golang实现断点续传功能

    Golang实现断点续传功能

    这篇文章主要为大家详细介绍了Golang实现断点续传、复制文件功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • Golang获取当前时间代码

    Golang获取当前时间代码

    本文给大家汇总介绍了golang中的相关的时间的操作,有需要的小伙伴可以拿走参考下
    2018-10-10
  • Go GORM 事务详细介绍

    Go GORM 事务详细介绍

    这篇文章主要介绍了Go GORM事务详细介绍,GORM 会在事务里执行写入操作创建、更新、删除,具体详细介绍需要的朋友可以参考下面文章的简单介绍
    2022-07-07
  • Golang对struct字段重新排序优化数据结构性能实践

    Golang对struct字段重新排序优化数据结构性能实践

    这篇文章主要为大家介绍了Golang对struct字段重新排序优化数据结构性能实践,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • 一文带你了解Golang中select的实现原理

    一文带你了解Golang中select的实现原理

    select是go提供的一种跟并发相关的语法,非常有用。本文将介绍 Go 语言中的 select 的实现原理,包括 select 的结构和常见问题、编译期间的多种优化以及运行时的执行过程
    2023-02-02
  • Go语言使用Timeout Context取消任务的实现

    Go语言使用Timeout Context取消任务的实现

    本文主要介绍了Go语言使用Timeout Context取消任务的实现,包括基本的任务取消和控制HTTP客户端请求的超时,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01

最新评论