時間:2023-05-29 07:36:01 | 來源:網(wǎng)站運(yùn)營
時間:2023-05-29 07:36:01 來源:網(wǎng)站運(yùn)營
Go Web編程實(shí)戰(zhàn)(8)----創(chuàng)建HTTP與HTTPS服務(wù)器端:package mainimport ( "fmt" "net/http")func helloworld(w http.ResponseWriter,r *http.Request) { fmt.Fprintf(w,"Hello World")}func main() { server :=&http.Server{ Addr: "127.0.0.1:80", } http.HandleFunc("/",helloworld) server.ListenAndServe()}
運(yùn)行之后,在瀏覽器的網(wǎng)頁輸入框中輸入127.0.0.1就會出現(xiàn)“Hello World”的簡單網(wǎng)頁。type Handler interface{ ServerHTTP(ResponseWriter,*Request)}
只要實(shí)現(xiàn)了這個接口,就可以實(shí)現(xiàn)自己的handler處理器。其具體的實(shí)現(xiàn)方式如下:type HandlerFunc func(ResponseWriter,*Request)func (f HandlerFunc)ServerHTTP(w ResponseWriter,r *Request){ f(w,r)}
handler處理器類似于Java SpringMVC框架中的Interceptor,是一個攔截器。它發(fā)生在http.HandlerFunc()函數(shù)處理邏輯之前。type Refer struct { handler http.Handler refer string}
這里可以看到,作者定義了2個對象,handler與自定義的refer。package mainimport ( "fmt" "net/http")type Refer struct { handler http.Handler refer string}func (this *Refer) ServeHTTP(w http.ResponseWriter,r *http.Request) { if r.Referer()==this.refer{ this.handler.ServeHTTP(w,r) }else{ w.WriteHeader(403) }}func myHandler(w http.ResponseWriter,r *http.Request) { w.Write([]byte("這是handler"))}func helloworld(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello World")}func main() { referer :=&Refer{ handler: http.HandlerFunc(myHandler), refer: "www.liyuanjing.com", } http.HandleFunc("/hello", helloworld) http.ListenAndServe(":80",referer)}
這個時候,如果運(yùn)行后,你直接輸入127.0.0.1,網(wǎng)頁會顯示拒絕訪問。func (srv *Server)ListenAndServeTLS(certFile,keyFile string) error
通過上面的方法,我們可以知道,HTTPS服務(wù)的創(chuàng)建只需要2個參數(shù)即可。其中,第一個參數(shù)為證書文件的路徑,第二個參數(shù)為私鑰文件的路徑。openssl req -newkey rsa:2048 -nodes -keyout server.key -x509 -days 365 -out server.crt
執(zhí)行該命令后,命令行的輸出內(nèi)容如下。這里,讀者可以隨便輸入。package mainimport ( "net/http")func handle(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hello World HTTPS"))}func main() { server := &http.Server{Addr: ":80", Handler: http.HandlerFunc(handle)} server.ListenAndServeTLS("server.crt", "server.key")}
運(yùn)行之后,網(wǎng)頁不會輸出Hello World HTTPS,那是因?yàn)檫@么創(chuàng)建的HTTPS相關(guān)證書是不被互聯(lián)網(wǎng)認(rèn)可的,但創(chuàng)建的過程就是這樣。關(guān)鍵詞:服務(wù),創(chuàng)建,實(shí)戰(zhàn)
客戶&案例
營銷資訊
關(guān)于我們
微信公眾號
版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。