いつの間にか go の http/net が renegotiation に対応していた話
何年か前(go 1.4時代)のお話。
ちょっと社内向けのツールを作成するのにせっかくだから勉強も兼ねて go で外部Webサービスからデータを収集するツールを書き、いざ動かそうとしたら
Post https://xxx/xxx: local error: tls: no renegotiation
go はHTTPSの再ネゴシエーションに対応してなかったらしい。
仕方がないのでその時は curl を呼び出してなんとかしていましたが、今(1.7以降)はオプションで再ネゴシエーションを許可できるようになってました。
func newHTTPClient() *http.Client {
transport := &http.Transport{
TLSClientConfig: &tls.Config{
Renegotiation: tls.RenegotiateFreelyAsClient,
},
}
return &http.Client{
Transport: transport,
}
}