1.获取HTTP请求服务器
package main
import (
"fmt"
"net"
"os"
)
func errFunc(err error, info string) {
if err != nil {
fmt.Println(info, err)
os.Exit(1)
}
}
func main01() {
listener, err := net.Listen("tcp", "127.0.0.1:8000")
errFunc(err, "net.Listen err:")
defer listener.Close()
conn, err := listener.Accept()
errFunc(err, "Accpet err:")
defer conn.Close()
buf := make([]byte, 4096)
n, err := conn.Read(buf)
if n == 0 {
return
}
errFunc(err, "conn.Read")
fmt.Printf("|%s|\n", string(buf[:n]))
}
2.http应答包-服务器返回包
package main
import (
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("hello 9fud9fd9"))
}
func main03() {
http.HandleFunc("/itcast", handler)
http.ListenAndServe("127.0.0.1:8000", nil)
}
3.http应答包-客户端发送包
package main
import (
"fmt"
"net"
"os"
)
func errFunc2(err error, info string) {
if err != nil {
fmt.Println(info, err)
os.Exit(1)
}
}
func main04() {
conn, err := net.Dial("tcp", "127.0.0.1:8000")
errFunc2(err, "Dial")
defer conn.Close()
httpRequest := "GET /itcast88 HTTP/1.1\r\nHost:127.0.0.1:8000\r\n\r\n"
conn.Write([]byte(httpRequest))
buf := make([]byte, 4096)
n, _ := conn.Read(buf)
if n == 0 {
return
}
fmt.Printf("|%s|\n", string(buf[:n]))
}
4.GO简易消息返回服务器
package main
import (
"fmt"
"net/http"
)
func myHandle(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("this is a Web server"))
fmt.Println("Header:", r.Header)
fmt.Println("URL:", r.URL)
fmt.Println("Method:", r.Method)
fmt.Println("Host:", r.Host)
fmt.Println("RemoteAddr:", r.RemoteAddr)
fmt.Println("Body:", r.Body)
}
func main05() {
http.HandleFunc("/", myHandle)
http.ListenAndServe("127.0.0.1:8000", nil)
}
5.GO搭建简易WEB服务器
package main
import (
"fmt"
"net/http"
"net/url"
"os"
)
func OpenSendFile(fNmae string, w http.ResponseWriter) {
pathFileName := "D:/功能/vscode/项目/HTML工作台/兰公子的主页/故梦的家" + fNmae
f, err := os.Open(pathFileName)
if err != nil {
fmt.Println("Open err:", err)
w.Write([]byte(" No such file or directory !"))
return
}
defer f.Close()
buf := make([]byte, 4096)
for {
n, _ := f.Read(buf)
if n == 0 {
return
}
w.Write(buf[:n])
}
}
func myHandler(w http.ResponseWriter, r *http.Request) {
fmt.Println("客户端请求:", r.URL)
URL, err := url.QueryUnescape(r.URL.String())
if err != nil {
fmt.Println(err)
return
}
fmt.Println("客户端请求:", URL)
OpenSendFile(URL, w)
}
func main() {
http.HandleFunc("/", myHandler)
http.ListenAndServe("127.0.0.1:8000", nil)
}
6.客户端针对服务端构造数据包
package main
import (
"fmt"
"io"
"net/http"
)
func main07() {
resp, err := http.Get("http://127.0.0.1:8000/hello")
if err != nil {
fmt.Println("Get err:", err)
return
}
defer resp.Body.Close()
fmt.Println("Status = ", resp.Status)
fmt.Println("StatusCode = ", resp.StatusCode)
fmt.Println("Header = ", resp.Header)
fmt.Println("Body = ", resp.Body)
buf := make([]byte, 4096)
var result string
for {
n, err := resp.Body.Read(buf)
if n == 0 {
fmt.Println("--Read finish!")
break
}
if err != nil && err != io.EOF {
fmt.Println("resp.Body.Read err:", err)
return
}
result += string(buf[:n])
}
fmt.Println("result = ", result)
}