package mainim" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運(yùn)營 > Go Web編程實(shí)戰(zhàn)(8)----創(chuàng)建HTTP與HTTPS服務(wù)器端

Go Web編程實(shí)戰(zhàn)(8)----創(chuàng)建HTTP與HTTPS服務(wù)器端

時間: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ù)器端:

創(chuàng)建一個HTTP服務(wù)端

其實(shí)Go語言創(chuàng)建一個簡單的HTTP服務(wù)器程序,與Java Web的servlet差不多。比如,我們這里創(chuàng)建一個簡單打印“Hello World”的程序。代碼如下:

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)頁。

這里,我們可以發(fā)現(xiàn),如果需要通過Go語言創(chuàng)建一個服務(wù)器,就需要了解net/http包的內(nèi)部邏輯。我們只看main()函數(shù)中的代碼,會發(fā)現(xiàn)其調(diào)用了HandleFunc()函數(shù)以及ListenAndServe()函數(shù)。

ListenAndServe()

在Go語言中,ListenAndServe()函數(shù)有2個參數(shù),第一個為監(jiān)聽的端口號,第二個為事件處理器handler。而handler接口的定義如下:

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ù)處理邏輯之前。

ServeHTTP()方法的使用示例

假如我們需要實(shí)現(xiàn)在HTTP發(fā)送請求時,只有帶上指定的refer參數(shù),該請求才能調(diào)用成功,否則返回403狀態(tài)。示例如下:

定義Refer結(jié)構(gòu)體

type Refer struct { handler http.Handler refer string}這里可以看到,作者定義了2個對象,handler與自定義的refer。

實(shí)現(xiàn)ServeHTTP()方法

完整代碼如下:

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)頁會顯示拒絕訪問。

創(chuàng)建一個HTTPS服務(wù)端

在Go語言中,net/http包中提供了創(chuàng)建HTTPS服務(wù)的方法,其定義如下:

func (srv *Server)ListenAndServeTLS(certFile,keyFile string) error通過上面的方法,我們可以知道,HTTPS服務(wù)的創(chuàng)建只需要2個參數(shù)即可。其中,第一個參數(shù)為證書文件的路徑,第二個參數(shù)為私鑰文件的路徑。

而我們需要先創(chuàng)建這2個文件,方能創(chuàng)建HTTPS服務(wù)。不過,一般能在互聯(lián)網(wǎng)流通的證書都是付費(fèi)的,雖然有些能免費(fèi),但比較麻煩。所以,這里博主僅做個示例,也就自己用用。

創(chuàng)建證書與私鑰

首先,你需要保證電腦下載,并正確配置了openssl。如果已經(jīng)下載配置,可以直接使用如下命令行進(jìn)行證書與私鑰的創(chuàng)建。

openssl req -newkey rsa:2048 -nodes -keyout server.key -x509 -days 365 -out server.crt執(zhí)行該命令后,命令行的輸出內(nèi)容如下。這里,讀者可以隨便輸入。

執(zhí)行完這些命令后,該目錄下會自動生成2個文件server.crt與server.key。下面,我們就可以使用這2個文件來創(chuàng)建自己的HTTPS服務(wù)器了。

創(chuàng)建HTTPS服務(wù)端

話不多說,這里直接上代碼,示例如下:

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)

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉