func HttpClientD() {
open, _ := os.Open("./view.txt")
//创建一个http客户端
client := http.Client{}
//创建一个请求
request, _ := http.NewRequest("POST", "http://localhost:9991/auth/authentication/login", open)
//cookies := request.Cookies()
//cookie对象
cookie := http.Cookie{
Name: "cookie",
Value: "cookie",
Path: "",
Domain: "",
Expires: time.Time{},
RawExpires: "",
MaxAge: 0,
Secure: false,
HttpOnly: false,
SameSite: 0,
Raw: "",
Unparsed: nil,
}
//请求中添加cookie
request.AddCookie(&cookie)
//设置请求头,设置发送内容的格式
request.Header.Set("Content-Type", "application/json; charset=UTF-8")
//发送请求
response, _ := client.Do(request)
defer response.Body.Close()
bytes := make([]byte, 1024)
for true {
_, err := response.Body.Read(bytes)
if err == io.EOF {
break
}
fmt.Println(string(bytes))
}
//获取请求中的参数
fmt.Println(request.Cookie("cookie"))
}
type LoginUser struct {
Username string `json:"username"`
Password string `json:"password"`
otherInfo string
}
func httpPost() {
user := LoginUser{
Username: "567891",
Password: "密码",
otherInfo: "json时被忽略",
}
//注意,这里json时忽略掉首字母小写的属性
marshal, _ := json.Marshal(user)
fmt.Println(string(marshal))
//open, _ := os.OpenFile("/view.txt", os.O_CREATE|os.O_RDWR, fs.ModePerm)
open, _ := os.Open("/view.txt")
defer open.Close()
//http客户端
client := &http.Client{}
//client.Get("/") //get请求
//发送post请求
resp, err := client.Post("http://localhost:9991/auth/authentication/login", "application/json;charset=UTF-8", open)//这种方式跟上面那中有区别
//resp, err := client.Post("http://localhost:9991/auth/authentication/login", "application/json;charset=UTF-8", strings.NewReader(string(marshal)))
//http返回的response的body必须close,否则就会有内存泄露
defer resp.Body.Close()
if err != nil {
fmt.Println(err.Error())
} else {
if resp.StatusCode == 200 {
all, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(all))
} else {
all, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(all))
}
}
}
go中使用client.Post()的方式跟上面 http.NewRequest() 的方式请求为什么会有不同? 或者下面的代码有什么问题?
为什么使用http.NewRequest() 时传的body 使用Reader就可以,而 client.Post()不可以?
看了下源码:也是调用NewRequest完成的请求,这是什么原因?
func (c *Client) Post(url, contentType string, body io.Reader) (resp *Response, err error) {
req, err := NewRequest("POST", url, body)
if err != nil {
return nil, err
}
req.Header.Set("Content-Type", contentType)
return c.Do(req)
}