Golang 및 Line Notify를 사용하여 API의 인증서 만료 확인 #golang
※ Let's Encrypt를 이용하고 있지만 3개월 만에 만료됨
golang 은 회사에서 새로운 프로다우트에 이용할 가능성이 있었기 때문에 시험에 사용해보기로 했습니다.
이전 준비
Golang 본가 사이트
사양
인수에 체크 대상의 엔드 포인트의 URI 및 Line Notify 용의 Token 를 설정할 수 있도록(듯이) 한다
$ apichecker -endpoint=${エンドポイントURI} -token=${Line Notify 用 Token}
소스 코드
$ go version
go version go1.9 darwin/amd64
apichecker.gopackage main
import (
"fmt"
"net/http"
"flag"
"log"
"net/url"
"strings"
"io/ioutil"
)
func main() {
var endpoint = flag.String("endpoint", "", "check target Endpoint URL")
var lineToken = flag.String("token", "", "LINE notify token")
flag.Parse()
var apiResult = getAPI(*endpoint)
var result = postLINE(*lineToken, apiResult)
fmt.Printf("LINE Post result [%t]\n", result)
}
func getAPI(endpoint string) string {
if endpoint == "" {
log.Fatal("not endpoint")
return "not endpoint"
}
var result = ""
resp, err := http.Get(endpoint)
if err != nil {
result = fmt.Sprintf("NG [%s]", err)
} else {
defer resp.Body.Close()
result = fmt.Sprintf("OK [%s]", endpoint)
}
return result
}
func postLINE(token string, message string) bool {
if token == "" {
log.Fatal("not token")
return false
} else if message == "" {
log.Fatal("not text")
return false
}
data := url.Values{"message": {message}}
r, _ := http.NewRequest("POST", "https://notify-api.line.me/api/notify", strings.NewReader(data.Encode()))
r.Header.Set("Content-Type", "application/x-www-form-urlencoded")
r.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token))
resp, err := http.DefaultClient.Do(r)
if err != nil {
log.Fatal(err)
return false
}
defer resp.Body.Close()
_, err = ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
return false
}
return true
}
※ LINE Notify를 Go로 보내기 를 참고로 했습니다.
실행 결과
OK인 경우
$ go run apichecker.go -endpoint=https://www.yahoo.co.jp -token=${Line Notify 用 Token}
LINE Post result [true]
NG의 경우(인증서 오류)
$ go run apichecker.go -endpoint=https://www.yahoo.jp -token=${Line Notify 用 Token}
LINE Post result [true]
Appendix
$ apichecker -endpoint=${エンドポイントURI} -token=${Line Notify 用 Token}
$ go version
go version go1.9 darwin/amd64
apichecker.go
package main
import (
"fmt"
"net/http"
"flag"
"log"
"net/url"
"strings"
"io/ioutil"
)
func main() {
var endpoint = flag.String("endpoint", "", "check target Endpoint URL")
var lineToken = flag.String("token", "", "LINE notify token")
flag.Parse()
var apiResult = getAPI(*endpoint)
var result = postLINE(*lineToken, apiResult)
fmt.Printf("LINE Post result [%t]\n", result)
}
func getAPI(endpoint string) string {
if endpoint == "" {
log.Fatal("not endpoint")
return "not endpoint"
}
var result = ""
resp, err := http.Get(endpoint)
if err != nil {
result = fmt.Sprintf("NG [%s]", err)
} else {
defer resp.Body.Close()
result = fmt.Sprintf("OK [%s]", endpoint)
}
return result
}
func postLINE(token string, message string) bool {
if token == "" {
log.Fatal("not token")
return false
} else if message == "" {
log.Fatal("not text")
return false
}
data := url.Values{"message": {message}}
r, _ := http.NewRequest("POST", "https://notify-api.line.me/api/notify", strings.NewReader(data.Encode()))
r.Header.Set("Content-Type", "application/x-www-form-urlencoded")
r.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token))
resp, err := http.DefaultClient.Do(r)
if err != nil {
log.Fatal(err)
return false
}
defer resp.Body.Close()
_, err = ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
return false
}
return true
}
※ LINE Notify를 Go로 보내기 를 참고로 했습니다.
실행 결과
OK인 경우
$ go run apichecker.go -endpoint=https://www.yahoo.co.jp -token=${Line Notify 用 Token}
LINE Post result [true]
NG의 경우(인증서 오류)
$ go run apichecker.go -endpoint=https://www.yahoo.jp -token=${Line Notify 用 Token}
LINE Post result [true]
Appendix
$ go run apichecker.go -endpoint=https://www.yahoo.co.jp -token=${Line Notify 用 Token}
LINE Post result [true]
$ go run apichecker.go -endpoint=https://www.yahoo.jp -token=${Line Notify 用 Token}
LINE Post result [true]
Reference
이 문제에 관하여(Golang 및 Line Notify를 사용하여 API의 인증서 만료 확인 #golang), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ynozue/items/d00a76e16d5a3d5a784c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)