go語言http接口示例
下面是一個獲取隨機數接口。
主要為獲取http請求參數,返回json數據。
1 // keymgrapiHttp project main.go 2 package main 3 4 import ( 5 "encoding/json" 6 "fmt" 7 "io" 8 "io/ioutil" 9 "log" 10 "net/http" 11 "strconv" 12 "yuzyong/keymgrapi" 13 ) 14 15 type Ret struct { 16 Code int 17 Outdata []byte 18 OutdataLen int 19 Param string 20 Msg string //msgtype?? 21 // Data []Data 22 } 23 24 var addr string = "192.168.2.148:9166" 25 var count int = 0 26 27 func main() { 28 fmt.Println("Hello World!") 29 httpStart() 30 } 31 32 func csp_random_Handler(w http.ResponseWriter, r *http.Request) { 33 //打印請求主機地址 34 fmt.Println(r.Host) 35 //打印請求頭信息 36 fmt.Printf("header content:[%v]\n", r.Header) 37 38 //獲取 post 請求中 form 里邊的數據 39 // fmt.Printf("form content:[%s, %s]\n", r.PostFormValue("username"), r.PostFormValue("passwd")) 40 // fmt.Printf("form content:[%s, %s]\n", r.PostFormValue("len"), r.PostFormValue("passwd")) 41 42 len := r.PostFormValue("randDataLen") 43 44 len_int, err := strconv.Atoi(len) 45 var randData = make([]byte, len_int) 46 // result, _, _ := YM_GenRandom(pKmpHandle, len_int, uintptr(unsafe.Pointer(&randData[0]))) 47 48 conn, err := keymgrapi.YM_GetConnect(addr) 49 if err != nil { 50 log.Printf("dial error: %s", err) 51 return 52 } 53 defer keymgrapi.YM_DisConnect(conn) 54 55 //正式開始調用接口 56 57 //隨機數 58 randData, _, status := keymgrapi.YM_GenRandom(conn, len_int) 59 if status == 0 { 60 count += 1 61 fmt.Printf("[%d] YM_GenRandom success. \n", count) 62 } else { 63 count += 1 64 fmt.Printf("[%d] YM_GenRandom error. status=%d \n", count, status) 65 fmt.Printf("[%d] YM_GenRandom failed. randData: %v\n", count, randData) 66 } 67 68 fmt.Println("randData: ", randData) 69 70 //讀取請求體信息 71 // bodyContent, err := ioutil.ReadAll(r.Body) 72 // if err != nil && err != io.EOF { 73 // fmt.Printf("read body content failed, err:[%s]\n", err.Error()) 74 // return 75 // } 76 // fmt.Printf("body content:[%s]\n", string(bodyContent)) 77 78 //響應 79 data := make(map[string]interface{}) 80 data["code"] = status 81 data["randData"] = randData 82 jsonData, _ := json.Marshal(data) 83 io.WriteString(w, string(jsonData)) 84 // fmt.Fprintf(w, string(jsonData)) 85 86 } 87 88 func IndexHandler(w http.ResponseWriter, r *http.Request) { 89 //打印請求主機地址 90 fmt.Println(r.Host) 91 //打印請求頭信息 92 fmt.Printf("header content:[%v]\n", r.Header) 93 94 //獲取 post 請求中 form 里邊的數據 95 fmt.Printf("form content:[%s, %s]\n", r.PostFormValue("username"), r.PostFormValue("passwd")) 96 97 //讀取請求體信息 98 bodyContent, err := ioutil.ReadAll(r.Body) 99 if err != nil && err != io.EOF { 100 fmt.Printf("read body content failed, err:[%s]\n", err.Error()) 101 return 102 } 103 fmt.Printf("body content:[%s]\n", string(bodyContent)) 104 105 //返回響應內容 106 fmt.Fprintf(w, "hello world ~") 107 } 108 109 func httpStart() { 110 http.HandleFunc("/index", IndexHandler) 111 // http.HandleFunc("/csp/msgDigest", csp_msgDigest_Handler) 112 http.HandleFunc("/csp/random", csp_random_Handler) 113 // http.HandleFunc("/csp/getsm4key", csp_getsm4key_handler) 114 // http.HandleFunc("/csp/sm4ecbEnc", csp_sm4ecbEnc_handler) 115 // http.HandleFunc("/csp/sm4ecbDec", csp_sm4ecbDec_handler) 116 // http.HandleFunc("/csp/sm4cbcEnc", csp_sm4cbcEnc_handler) 117 // http.HandleFunc("/csp/sm4cbcDec", csp_sm4cbcDec_handler) 118 // http.HandleFunc("/csp/genMac", csp_genMac_handler) 119 // http.HandleFunc("/csp/verifyMac", csp_verifyMac_handler) 120 // http.HandleFunc("/csp/genSM2KeyPair", csp_genSM2KeyPair_handler) 121 // http.HandleFunc("/csp/sm2PubKeyEnc", csp_sm2PubKeyEnc_handler) 122 // http.HandleFunc("/csp/sm2PriKeyDec", csp_sm2PriKeyDec_handler) 123 // http.HandleFunc("/csp/sm2Sign", csp_sm2Sign_handler) 124 // http.HandleFunc("/csp/sm2Verify", csp_sm2Verify_handler) 125 // http.HandleFunc("/csp/getSM2PubKey", csp_getSM2PubKey_handler) 126 http.ListenAndServe("0.0.0.0:8000", nil) 127 128 }
postman測試接口