LoginSignup
16
15

More than 5 years have passed since last update.

goでhttpsのテストサーバを動かしてアクセスするサンプル

Posted at
  • net.httpを使うとテスト用のサーバを立てられます。
  • InsecureSkipVerifyをtrueにしておかないとx509: certificate signed by unknown authorityexit 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")
}
16
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
15