메인 패키지 수입 ( "bufio" "IO" "FMT" "IO / ioutil" "OS / 간부" "그물 / HTTP" "OS" "문자열" ) FUNC하는 getKey () (소인 문자열, 기호 문자열, 오류 잘못) { 명령 : = exec.Command ( "/ 빈 / 파이썬", "/application/scripts/hezhong_host_status/aaa.py") 표준 출력, ERR = cmd.StdoutPipe () 잘못을하면! = nil이 { fmt.Println ( "오류 : 명령 파이프 표준 출력을 얻을 수 없다 : S % \ 않음"을 ERR) ERR, 서명, 타임 스탬프를 반환 } 만약 ERR = cmd.Start (); ERR! = 전무 { fmt.Println ( "오류 : 명령이 잘못되어"ERR) ERR, 서명, 타임 스탬프를 반환 } 이었다 키 [] 문자열 모든 출력을 읽을 // 바이트 = bufio.NewReader (표준 출력) 에 대한 { 라인 ERR = bytes.ReadString ( '\ n')에 경우 ERR == io.EOF { 단절 } 잘못을하면! = nil이 { fmt.Println는 ( "잘못 읽기", ERR) } 키 = APPEND (키, 선) } ERR가있는 경우 :! = cmd.Wait은 (); 잘못 = 전무 { fmt.Println ( "대기", err.Error ()) ERR, 서명, 타임 스탬프를 반환 } 소인 키 = [0] 서명 키 = [1] 반환 타임 스탬프, 로그인, 전무 } FUNC SendDingMsg (MSG 문자열) { // 요청 주소 템플릿 타임 스탬프, 로그인, ERR : =하는 getKey () 잘못을하면! = nil이 { fmt.Println는 ( "키 ERR 받기", ERR) } 타임 스탬프 = strings.TrimRight ( "n \"소인) ( "N \"기호) = strings.TrimRight 서명 // 타임 스탬프 :. = time.Now () UnixNano () / 1E6 // 타임 스탬프 : = INT64 (1572870805748) 서명 // : = "oJ5SHD3IwCWVIcL78k3pgX0tfQnjDfcDZMPXAI % 2BvrFE % 3D" 은 webhook = "https://oapi.dingtalk.com/robot/send?access_token=628d11124aef5f9efe2a8c8a6b5afa2b67ab01dxxxxxxxxxxxxxxxxxxxxx&"+"타임 스탬프 = "+ 타임 스탬프 +"& 서명 = "+ 기호 내용 : =`{ "MSGTYPE": "텍스트", "텍스트": { "내용": "`+ MSG +`"}, "에서": { "atMobiles"[ "18301371817" ], "isAtAll"사실 } }` 요청을 만들기 // REQ, ERR = http.NewRequest ( "POST"은 webhook, strings.NewReader (콘텐츠)) 잘못을하면! = nil이 { fmt.Println (ERR) } 클라이언트 : = http.Client {} // 요청 헤더를 설정 req.Header.Set ( "Content-Type을", "응용 프로그램 / JSON") req.Header.Set ( "사용자 에이전트", "파이어 폭스") 요청을 보내 // RESP, ERR = client.Do (REQ) // 종료 요청 ) (resp.Body.Close을 연기 fmt.Println (resp.StatusCode) 바디 _ = ioutil.ReadAll (resp.Body) fmt.Println (문자열 (몸)) 잘못을하면! = nil이 { fmt.Println ( "핸들 오류") } } FUNC 메인 () { SendDingMsg (os.Args [1]) }
보조 파이썬 스크립트 :
#! 파이썬 2.7 수입 시간 수입 HMAC 수입 hashlib 수입 base64로 수입 URLLIB 타임 스탬프 = 길이 (라운드 (로 time.time () * 1000)) 비밀 = '이것은 비밀' secret_enc = 바이트 (비밀) 함수 .encode ( "UTF-8") string_to_sign = "{} \ {N}. 형식 (소인 비밀) string_to_sign_enc = 바이트 (string_to_sign) 함수 .encode ( "UTF-8") hmac_code = hmac.new (secret_enc, string_to_sign_enc, digestmod = hashlib.sha256) .digest () 기호 = urllib.quote_plus (base64.b64encode (hmac_code)) 인쇄 (타임 스탬프) print(sign)