nethttp - skynocover/Wiki-for-GoLang GitHub Wiki

nethttp

http.HandleFunc("/",handler)
port := "8080"
log.Println("http server run on"+port+"port")
log.Fatal(http.ListenAndServe(":"+port,nil))

func handler(w http.ResponseWriter,r *http.Request)  {
    fmt.Fprintf(w,"I love %s",r.URL.Path[1:])
}
/*
curl http://localhost:8080/apple #在linux執行
I love apple #顯示
*/

test

作法一

import (
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
)

func main() {
    res, err := http.Get("https://blog.syhlion.tw/sitemap.xml")
    if err != nil {
        log.Fatal(err)
    }
    defer res.Body.Close()
    sitemap, err := ioutil.ReadAll(res.Body) //使用ioutil讀取
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("%s", sitemap)
}

另外一種用法

import (
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
)

func main() {
    client := &http.Client{}

    //這邊可以任意變換 http method  GET、POST、PUT、DELETE
    req, err := http.NewRequest("GET", "https://blog.syhlion.tw/sitemap.xml", nil)
    if err != nil {
        log.Println(err)
        return
    }
    req.Header.Add("If-None-Match", `W/"wyzzy"`)
    resp, err := client.Do(req)
    if err != nil {
        log.Println(err)
    return
    }
    defer resp.Body.Close()
    sitemap, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        log.Fatal(err)
        return
    }

    fmt.Printf("%s", sitemap)
}

cors

// use the middleware
http.Handle("/query", exampleMiddleware(srv))

// make the middleware
func exampleMiddleware(next http.Handler) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		if r.Method == http.MethodOptions {
			w.Header().Set("Access-Control-Allow-Origin", "*")
			w.Header().Set("Access-Control-Allow-Methods", "POST")
			w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
			w.Header().Set("Access-Control-Max-Age", "3600")
			w.WriteHeader(http.StatusNoContent)
			return
		}
		// Our middleware logic goes here...
		w.Header().Set("Access-Control-Allow-Origin", "*")
		next.ServeHTTP(w, r)
	})
}