- net.httpを使うとテスト用のサーバを立てられます。
- InsecureSkipVerifyをtrueにしておかないと
x509: certificate signed by unknown authority
でexit status 1
となります。 - trの閉じ中括弧の前で改行するにはカンマが必要です。これがないと
syntax error: need trailing comma before newline in composite literal
というコンパイルエラーになります。
https_sample.go
package main
import (
"crypto/tls"
"fmt"
"io/ioutil"
"log"
"net/http"
"net/http/httptest"
)
func newClient() *http.Client {
tr := &http.Transport{
TLSClientConfig: &tls.Config{ InsecureSkipVerify: true },
}
return &http.Client{Transport: tr}
}
func getUrl(client *http.Client, url string) {
res, err := client.Get(url)
if err != nil {
log.Fatal(err)
}
defer res.Body.Close()
contents, err := ioutil.ReadAll(res.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s", contents)
}
func runServer() *httptest.Server {
mux := http.NewServeMux()
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, client")
})
mux.HandleFunc("/foo", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, foo")
})
return httptest.NewTLSServer(mux)
}
func main() {
server := runServer()
defer server.Close()
client := newClient()
getUrl(client, server.URL)
getUrl(client, server.URL + "/foo")
}