前言
go自带http请求工具,不用额外引入http工具包,Go语言内置的net/http包,提供了HTTP客户端和服务端的实现
http使用
Get请求
http.Get使用
使用http接口
@GetMapping("/hello")
public String hello(@RequestParam Long id) {
log.info("id的值为:{{}}", id);
return "success";
}
使用http.Get发送Get请求
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
response, _ := http.Get("http://localhost:3008/hello?id=1")
fmt.Println(response.StatusCode)
if response.StatusCode == http.StatusOK {
data, _ := io.ReadAll(response.Body)
fmt.Println(string(data))
}
}
返回值为
还可以
package main
import (
"fmt"
"io"
"log"
"net/http"
"net/url"
)
func main() {
apiUrl := "http://127.0.0.1:3008/hello"
data := url.Values{}
data.Set("id", "1")
u, err := url.ParseRequestURI(apiUrl)
if err != nil {
log.Println("请求发生异常:", err)
return
}
u.RawQuery = data.Encode() // URL encode
fmt.Println(u.String())
response, err1 := http.Get(u.String())
if err1 != nil {
log.Println("请求发生异常:", err1)
return
}
if response.StatusCode == http.StatusOK {
data, _ := io.ReadAll(response.Body)
fmt.Println(string(data))
}
}
post请求
定义一个实体类
public record User(Long id, String name, Integer age) {
}
以及一个post请求
@PostMapping("/save")
public String save(@RequestBody User user) {
log.info("保存的值为:{{}}", user);
return "success";
}
http.post使用如下
package main
import (
"encoding/json"
"fmt"
"io"
"log"
"net/http"
"strings"
)
type User struct {
Id int64 `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
var user = User{1, "aa", 12}
url := "http://127.0.0.1:3008/save"
contentType := "application/json"
data, err1 := json.Marshal(user)
if err1 != nil {
log.Println("json异常:", err1)
return
}
resp, err := http.Post(url, contentType, strings.NewReader(string(data)))
if err != nil {
log.Println("请求异常:", err)
return
}
b, err := io.ReadAll(resp.Body)
if err != nil {
fmt.Println("解析异常:", err)
return
}
log.Println(string(b))
}
使用http.post发送表单请求
1、定义一个接口
@PostMapping("/postForm")
public String postForm(User user) {
log.info("保存的值为:{{}}", user);
return "success";
}
2、发送http表单请求
package main
import (
"fmt"
"io"
"log"
"net/http"
"strings"
)
func main() {
url := "http://127.0.0.1:3008/postForm"
contentType := "application/x-www-form-urlencoded"
data := "id=1&name=aa"
resp, err := http.Post(url, contentType, strings.NewReader(string(data)))
if err != nil {
log.Println("请求异常:", err)
return
}
b, err := io.ReadAll(resp.Body)
if err != nil {
fmt.Println("解析异常:", err)
return
}
log.Println(string(b))
}
或者
package main
import (
"fmt"
"io"
"log"
"net/http"
"net/url"
)
func main() {
targetUrl := "http://127.0.0.1:3008/postForm"
payload := url.Values{"name": {"hello"}, "id": {"1"}}
response, err := http.PostForm(targetUrl, payload)
if err != nil {
log.Println("请求异常:", err)
return
}
b, err := io.ReadAll(response.Body)
if err != nil {
fmt.Println("解析异常:", err)
return
}
log.Println(string(b))
}
http.NewRequest使用
Get请求
1、定义一个get接口
@GetMapping("/hello")
public String hello(@RequestParam Long id) {
log.info("id的值为:{{}}", id);
return "success";
}
发送get请求
package main
import (
"fmt"
"io"
"log"
"net/http"
)
func main() {
url := "http://127.0.0.1:3008/hello?id=1"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "hello")
response, err := http.DefaultClient.Do(req)
if err != nil {
log.Println("请求异常:", err)
return
}
b, err := io.ReadAll(response.Body)
if err != nil {
fmt.Println("解析异常:", err)
return
}
log.Println(string(b))
}
post发送json请求
1、定义一个实体类
public record User(Long id, String name, Integer age) {
}
2、定义一个接口
@PostMapping("/save")
public String save(@RequestBody User user) {
log.info("保存的值为:{{}}", user);
return "success";
}
3、发送post以及json请求
package main
import (
"encoding/json"
"fmt"
"io"
"log"
"net/http"
"strings"
)
type User struct {
Id int64 `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
targetUrl := "http://127.0.0.1:3008/save"
var user = User{1, "aa", 12}
data, err1 := json.Marshal(user)
if err1 != nil {
log.Println("json异常:", err1)
return
}
req, err := http.NewRequest("POST", targetUrl, strings.NewReader(string(data)))
if err != nil {
log.Println("请求异常:", err)
return
}
req.Header.Add("Content-Type", "application/json")
response, err := http.DefaultClient.Do(req)
if err != nil {
log.Println("请求异常:", err)
return
}
b, err := io.ReadAll(response.Body)
if err != nil {
fmt.Println("解析异常:", err)
return
}
log.Println(string(b))
}
DELETE请求
1、定义一个delete请求接口
@DeleteMapping("/deleteById")
public String deleteById(@RequestParam Long id) {
log.info("id的值为:{{}}", id);
return "success";
}
2、发送delete请求
package main
import (
"fmt"
"io"
"log"
"net/http"
)
func main() {
targetUrl := "http://127.0.0.1:3008/deleteById?id=12"
req, err := http.NewRequest(http.MethodDelete, targetUrl, nil)
if err != nil {
log.Println("请求异常:", err)
return
}
response, err := http.DefaultClient.Do(req)
if err != nil {
log.Println("请求异常:", err)
return
}
b, err := io.ReadAll(response.Body)
if err != nil {
fmt.Println("解析异常:", err)
return
}
log.Println(string(b))
}
put请求
1、定义一个put请求
@PutMapping("/update")
public String update(@RequestBody User user) {
log.info("更新的值为:{{}}", user);
return "success";
}
2、发送put请求
package main
import (
"encoding/json"
"fmt"
"io"
"log"
"net/http"
"strings"
)
type User struct {
Id int64 `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
targetUrl := "http://127.0.0.1:3008/update"
var user = User{1, "aa", 12}
data, err1 := json.Marshal(user)
if err1 != nil {
log.Println("json异常:", err1)
return
}
req, err := http.NewRequest(http.MethodPut, targetUrl, strings.NewReader(string(data)))
req.Header.Add("Content-Type", "application/json")
if err != nil {
log.Println("请求异常:", err)
return
}
response, err := http.DefaultClient.Do(req)
if err != nil {
log.Println("请求异常:", err)
return
}
b, err := io.ReadAll(response.Body)
if err != nil {
fmt.Println("解析异常:", err)
return
}
log.Println(string(b))
}
patch请求
1、定义一个patch请求
@PatchMapping("/update1")
public String update1(@RequestBody User user) {
log.info("更新的值为:{{}}", user);
return "success";
}
2、发送patch请求
package main
import (
"encoding/json"
"fmt"
"io"
"log"
"net/http"
"strings"
)
type User struct {
Id int64 `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
targetUrl := "http://127.0.0.1:3008/update1"
var user = User{1, "aa", 12}
data, err1 := json.Marshal(user)
if err1 != nil {
log.Println("json异常:", err1)
return
}
req, err := http.NewRequest(http.MethodPatch, targetUrl, strings.NewReader(string(data)))
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", "hello")
if err != nil {
log.Println("请求异常:", err)
return
}
response, err := http.DefaultClient.Do(req)
if err != nil {
log.Println("请求异常:", err)
return
}
b, err := io.ReadAll(response.Body)
if err != nil {
fmt.Println("解析异常:", err)
return
}
log.Println(string(b))
}
post表单
1、定义一个实体类
public record User(Long id, String name, Integer age) {
}
2、定义一个接口
@PostMapping("/postForm")
public String postForm(User user) {
log.info("保存的值为:{{}}", user);
return "success";
}
3、发送http表单请求
package main
import (
"fmt"
"io"
"log"
"net/http"
"net/url"
"strings"
)
type User struct {
Id int64 `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
targetUrl := "http://127.0.0.1:3008/postForm"
urlMap := url.Values{}
urlMap.Add("id", "1")
urlMap.Add("name", "aaaa")
urlMap.Add("age", "18")
req, err := http.NewRequest(http.MethodPost, targetUrl, strings.NewReader(urlMap.Encode()))
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
req.Header.Add("Authorization", "hello")
if err != nil {
log.Println("请求异常:", err)
return
}
response, err := http.DefaultClient.Do(req)
if err != nil {
log.Println("请求异常:", err)
return
}
b, err := io.ReadAll(response.Body)
if err != nil {
fmt.Println("解析异常:", err)
return
}
log.Println(string(b))
}
总结
go自带的net/http包是十分优秀的http包,也不用引入第三方包,就可以发送http请求