package main
import (
"bytes"
"encoding/json"
"io"
"io/ioutil"
"net/http"
"time"
)
// 发送GET请求
// url: 请求地址
// response: 请求返回的内容
func Get(url string) string {
// 超时时间:5秒
client := &http.Client{Timeout: 5 * time.Second}
resp, err := client.Get(url)
if err != nil {
panic(err)
}
defer resp.Body.Close()
var buffer [512]byte
result := bytes.NewBuffer(nil)
for {
n, err := resp.Body.Read(buffer[0:])
result.Write(buffer[0:n])
if err != nil && err == io.EOF {
break
} else if err != nil {
panic(err)
}
}
return result.String()
}
// 发送POST请求
//func Post(url string, contentType string, body io.Reader) (resp *Response, err error)
// url: 请求地址
// data: POST请求提交的数据
// contentType: 请求体格式,如:application/json
// body : 请求发送的内容
//func NewReader(s string) *Reader
//NewReader:返回一个从s读取的新阅读器(仅支持读)。
//NewReader:创建一个从s读取数据的Reader(阅读器)。
//Post:Post向指定的URL发出Post(post请求)
res, err := http.Post(esRequestUrl, "application/json", strings.NewReader(string(esRequestData)))
if err != nil {
log.GLogger.Error(err.Error())
return nil, err
}
defer res.Body.Close()
body, err := ioutil.ReadAll(res.Body)
if err != nil {
log.GLogger.Error(err.Error())
return nil, err
}
}
log.GLogger.Info("es search url:%v, req:%T, resp:%v", esRequestUrl, esRequestData, string(body))
net/http包没有封装直接使用请求带header的get或者post方法,所以,要想请求中带header或设置cookie(下面列子中有设置cookie的方法),只能使用NewRequest方法(使用该方法时需要先对client实例化:client := &http.Client{})
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的值,返回类型是bytejson.MarshalIndent(stuReq):修改json为标准格式http.Clicent:是一个HTTP客户端,客户机比往返器(比如传输)更高级,还处理HTTP细节,比如cookie,重定向,长连接。
func httpDo() {
// http.Clicent:是一个HTTP客户端,客户机比往返器(比如传输)更高级,还处理HTTP细节,比如cookie,重定向,长连接。
client := &http.Client{}
// 使用 NewRequest 设置头参数、cookie之类的数据,
req, err := http.NewRequest("POST", "http://www.01happy.com/demo/accept.php", strings.NewReader("name=cjb"))
if err != nil {
// handle error
}
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
req.Header.Set("Cookie", "name=anny")
resp, err := client.Do(req)
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
// handle error
}
fmt.Println(string(body))
}
未完待续~
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)