1.发送请求获取数据,并缓存到buffer
//获取数据并缓存到buffer
func GetData() (*bytes.Buffer, error) {
var(
url string
err error
req *http.Request
res *http.Response
client *http.Client
buffer *bytes.Buffer
)
//构造request
url = "https://ea.azure.cn/rest/V5l##333333/usage-report"
if req, err = http.NewRequest("GET", url, nil); err !=nil{
return nil, err
}
//添加get请求参数
values := req.URL.Query()
values.Add("month", "2019-7")
values.Add("type", "detail")
//values.Add("fmt", "Json")
values.Add("fmt", "csv")
//编译请求参数
req.URL.RawQuery = values.Encode()
//设置请求head
req.Header.Set("Authorization", "bearer acaklkjlabacddjlejoi")
req.Header.Set("api-version", "2016-08-31")
//构造客户端,发送请求
client = &http.Client{}
if res, err = client.Do(req); err !=nil{
return nil, err
}
//关闭res.Body
defer func() {
if err=res.Body.Close(); err!=nil{
return
}
}()
//判断请求是否成功
if res.StatusCode == 200 {
fmt.Println("请求成功")
//创建缓存器buffer,当数据大于4096时,缓存器会自动增加大小,直到将所有数据拷贝完
buffer = bytes.NewBuffer(make([]byte, 4096))
//将res.Body拷贝到缓存器buffer
if _, err = io.Copy(buffer, res.Body); err != nil {
fmt.Println("io.copy err: ", err)
}
}
return buffer, nil
}2. 按行读取缓存器中的数据
//从buffer中获取数据
func ReadBuffer(buffer *bytes.Buffer) {
var(
str string
err error
)
for{
//按行读取缓存器buffer
if str, err = buffer.ReadString('\n'); err!=nil{
//判断是否获取完毕
if err == io.EOF{
fmt.Println("获取完毕")
break
}else {
fmt.Println(`*buffer.ReadString('\n') err: `, err)
}
}
fmt.Println("获取到的内容是:", str)
}
//清空buffer
buffer.Reset()
}