框架推荐
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 ...")
}