http编程
http建立的仍是TCP连接,用的是http协议
- 服务端开发
package main
import (
"fmt"
"net/http"
)
func Hello(w http.ResponseWriter, r *http.Request) {
fmt.Println("handle hello")
fmt.Fprintf(w, "hello ")
}
func main() {
http.HandleFunc("/", Hello)
err := http.ListenAndServe("0.0.0.0:8880", nil)
if err != nil {
fmt.Println("http listen failed")
}
}
打开游览器输入:localhost:8880
游览器显示:hello
终端输出:handle hello
- 客户端开发
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
res, err := http.Get("https://www.baidu.com/")
if err != nil {
fmt.Println("get err:", err)
return
}
data, err := ioutil.ReadAll(res.Body)
if err != nil {
fmt.Println("get data err:", err)
return
}
fmt.Println(string(data))
}
常见请求方法
- Get请求-服务器读资源
- Post请求-更新资源
- Put请求-创建资源
- Delete请求-删除资源
- Head请求-是否同步/正常
Head请求
package main
import (
"fmt"
"net"
"net/http"
"time"
)
var url = []string{
"http://www.baidu.com",
"http://google.com",
"http://taobao.com",
}
func main() {
for _, v := range url {
// 自定义一个客户端
c:= http.Client{
Transport: &http.Transport{
Dial :func (network, addr string) (net.Conn, error) {
timeout:=time.Second*2
return net.DialTimeout(network,addr,timeout)
},
},
}
resp, err := c.Head(v)
if err != nil {
fmt.Printf("head %s failed, err:%v\n", v, err)
continue
}
fmt.Printf("head succ, status:%v\n", resp.Status)
}
}
常见的状态码
- http.StatusContinue = 100 请求服务端
- http.StatusOK = 200 成功
- http.StatusFound = 302 跳转
- http.StatusBadRequest = 400 非法请求
- http.StatusUnauthorized = 401 权限未通过
- http.StatusForbidden = 403 禁止访问
- http.StatusNotFound = 404 页面不存在
- http.StatusInternalServerError = 500 内部错误
模板
- if判断
<html>
<head>
</head>
<body>
{{if gt .Age 18}}
<p>hello, old man, {{.Name}}</p>
{{else}}
<p>hello,young man, {{.Name}}</p>
{{end}}
</body>
</html>
• not 非{{if not .condition}} {{end}}
• and 与{{if and .condition1 .condition2}} {{end}}
• or 或{{if or .condition1 .condition2}} {{end}}
• eq 等于{{if eq .var1 .var2}} {{end}}
• ne 不等于{{if ne .var1 .var2}} {{end}}
• lt 小于 (less than){{if lt .var1 .var2}} {{end}}
• le 小于等于{{if le .var1 .var2}} {{end}}
• gt 大于{{if gt .var1 .var2}} {{end}}
• ge 大于等于{{if ge .var1 .var2}} {{end}}
- 接受到的模板
{{.}}
<html>
<head>
</head>
<body>
<p>hello, old man, {{.}}</p>
</body>
</html>
- 循环
<html>
<head>
</head>
<body>
{{range .}}
{{if gt .Age 18}}
<p>hello, old man, {{.Name}}</p>
{{else}}
<p>hello,young man, {{.Name}}</p>
{{end}}
{{end}}
</body>
</html>