06-HTTP客户端
package main
import (
"fmt"
"io"
"net/http"
)
func main(){
//获取服务器应答包内容
resp,err := http.Get( "http://www.baidu.com")
if err != nil {
fmt.Println( "http.Get err:", err)
return
}
defer resp.Body.Close()
//简单查看应答包
fmt.Println( "Header :", resp.Header)
fmt.Println( "Status:", resp.Status)
fmt.Println( "Header :", resp.StatusCode)
fmt.Println( "Proto:", resp.Proto)
buf := make([]byte,4096)
var result string
var sum int
var i int
for {
i ++
n,err := resp.Body.Read(buf)
sum += n
//if n < 4096 {
// fmt.Println("--读完了00----Read finish < 4096 ",err)
// break
//}
if n == 0 {
fmt.Println("---读完了01---Read finish == 0",err)
break
}
// err != io.EOF 如果一次读取500字节,当读取最后只有320个时,err就被赋值io.EOF,下一次 读取个数为0,网络中常用n==0,判断读取完,文档中常用io.EOF
if err != nil && err != io.EOF{ // err==io.EOF表示读完了
fmt.Println("Body.Read err:", err)
break
}
if n == 0 {
fmt.Println("你好啊",i)
break
}
result += string(buf[:n])
}
//fmt.Printf("|%v|\n",result)
fmt.Printf("|字数%v|\n",sum)
}
/*
type Response struct {
Status string // 例如"200 OK"
StatusCode int // 例如200
Proto string // 例如"HTTP/1.0"
ProtoMajor int // 例如1
ProtoMinor int // 例如0
// Header保管头域的键值对。
// 如果回复中有多个头的键相同,Header中保存为该键对应用逗号分隔串联起来的这些头的值
// (参见RFC 2616 Section 4.2)
// 被本结构体中的其他字段复制保管的头(如ContentLength)会从Header中删掉。
//
// Header中的键都是规范化的,参见CanonicalHeaderKey函数
Header Header
// Body代表回复的主体。
// Client类型和Transport类型会保证Body字段总是非nil的,即使回复没有主体或主体长度为0。
// 关闭主体是调用者的责任。
// 如果服务端采用"chunked"传输编码发送的回复,Body字段会自动进行解码。
Body io.ReadCloser
// ContentLength记录相关内容的长度。
// 其值为-1表示长度未知(采用chunked传输编码)
// 除非对应的Request.Method是"HEAD",其值>=0表示可以从Body读取的字节数
ContentLength int64
// TransferEncoding按从最外到最里的顺序列出传输编码,空切片表示"identity"编码。
TransferEncoding []string
// Close记录头域是否指定应在读取完主体后关闭连接。(即Connection头)
// 该值是给客户端的建议,Response.Write方法的ReadResponse函数都不会关闭连接。
Close bool
// Trailer字段保存和头域相同格式的trailer键值对,和Header字段相同类型
Trailer Header
// Request是用来获取此回复的请求
// Request的Body字段是nil(因为已经被用掉了)
// 这个字段是被Client类型发出请求并获得回复后填充的
Request *Request
// TLS包含接收到该回复的TLS连接的信息。 对未加密的回复,本字段为nil。
// 返回的指针是被(同一TLS连接接收到的)回复共享的,不应被修改。
TLS *tls.ConnectionState
}
*/
写入自己的博客中才能记得长久