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 #顯示
*/

作法一
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)
})
}