go http Client net/http

news/2025/2/22 18:14:25

框架推荐

net/http

go的内置http工具,可以构建client和server。

@Slf4j
@Controller
@RequestMapping("/rest")
public class RestTestController {

    @GetMapping("/get")
    @ResponseBody
    public String get(@RequestBody SSHConnectParam param) throws Exception {
        log.info(JsonUtil.beanToJson(param));
        return JsonUtil.beanToJson(param);
    }

    @PostMapping("/post")
    @ResponseBody
    public String post(@RequestBody SSHConnectParam param) throws Exception {
        log.info(JsonUtil.beanToJson(param));
        return JsonUtil.beanToJson(param);
    }

}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SSHConnectParam {
    private String ip;
    private int port;
    private String username;
    private String password;
}

-- get方法:
import (
    "io"
    "io/ioutil"
    "log"
    "net/http"
    "strings"
)

// Get 用net http实现一个 可以body json格式的GET方法
func Get(c *http.Client, url string, body io.Reader) (resp *http.Response, err error) {
    req, err := http.NewRequest("GET", url, body)
    if err != nil {
       return nil, err
    }
    req.Header.Set("Content-Type", "application/json")
    return c.Do(req)
}

func main() {
    log.Println("main ...")

    // 简单的get方法
    //resp, err := http.Get("http://localhost:8081/rest/get")

    // 用自定义的GET方法
    // requestBody:strings.NewReader 传json
    resp, err := Get(http.DefaultClient, "http://localhost:8081/rest/get", strings.NewReader("{\"ip\":\"11111111\",\"password\":\"2222\",\"port\":0,\"username\":\"4444\"}"))
    if err != nil {
       log.Fatalln("get error", err.Error())
    }
    // 完事关闭response的body
    defer resp.Body.Close()
    // 打印header中数据
    log.Println("response headers:", resp.Header)
    log.Println("response status:", resp.StatusCode)

    // 读取body中的数据
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
       log.Fatalln("read response body error", err.Error())
    }
    // 打压body,将二进制的body转换为string
    log.Println(string(body))

    log.Println("success ...")
}

-- POST方法:
import (
    "io/ioutil"
    "log"
    "net/http"
    "strings"
)

func main() {
    log.Println("main ...")

    resp, err := http.Post("http://localhost:8081/rest/post", "application/json", strings.NewReader("{\"ip\":\"11111111\",\"password\":\"2222\",\"port\":0,\"username\":\"4444\"}"))
    if err != nil {
       log.Fatalln("post error", err.Error())
    }

    log.Println("response headers:", resp.Header)
    log.Println("response status code:", resp.StatusCode)

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
       log.Fatalln("parse body error", err.Error())
    }
    log.Println("response body:", string(body))

    log.Println("success ...")
}


http://www.niftyadmin.cn/n/5862615.html

相关文章

三、linux字符驱动详解

在上一节完成NFS开发环境的搭建后,本节将探讨Linux字符设备驱动的开发。字符设备驱动作为Linux内核的重要组成部分,主要负责管理与字符设备(如串口、键盘等)的交互,并为用户空间程序提供统一的读写操作接口。 驱动代码…

http代理IP怎么实现?如何解决代理IP访问不了问题?

HTTP代理是一种网络服务,它充当客户端和目标服务器之间的中介。当客户端发送请求时,请求首先发送到代理服务器,然后由代理服务器转发到目标服务器。同样,目标服务器的响应也会先发送到代理服务器,再由代理服务器返回给…

tidb实时同步到mysql

客户要求实时同步表的数据到mysql,但这个表在tidb。 测试直接通过tidb cdc写入到mysql,有些字段是null,所以中间加了一个kafka实现 客户库中创建表 CREATE TABLE tb_1 (id bigint primary key,cid bigint,gid bigint,fee DECIMAL(10,2),cre…

若依框架实现动态失效时间JWT Token的实践指南

一、功能需求背景 在前后端分离架构中,JWT(JSON Web Token)作为无状态认证方案被广泛使用。若依(RuoYi)框架的TokenService默认采用固定失效时间策略,但在实际开发中常需要根据业务场景动态调整Token有效期…

GUI编程(window系统→Linux系统)

最近有个项目需要将windows系统的程序往Linux系统上面移植,由于之前程序没有考虑过多平台兼容的问题,导致部分功能不可用以下是对近期遇到的问题的总结,以及相应的解决方案和经验分享。 1. Python 模块安装与管理 在 Linux 系统中&#xff0…

C#设计模式 学习笔记

概述 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的代码设计经验的总结 本文是《C#设计模式》书籍的学习笔记 面向对象设计原则 单一职责原则 一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中 开闭原则 对扩展开放,对…

java(spring boot)实现向deepseek/GPT等模型的api发送请求/多轮对话(附源码)

我们再启动应用并获取api密钥后就可以对它发送请求了,但是官方文档对于如何进行多轮对话以及怎么自定义参数并没有说的很清楚,给的模板也没有java的,因此我们需要自己实现。 import org.json.JSONArray; import org.json.JSONObject;import j…

设计模式教程:迭代器模式(Iterator Pattern)

迭代器模式(Iterator Pattern)是设计模式中的一种行为型模式,它允许顺序访问一个集合对象中的元素,而无需暴露集合对象的内部结构。换句话说,迭代器模式提供了一个方法,能让你遍历集合中的元素,…