…ということでソースをそのまま公開すると「アタックを繰り返すプログラムを公開し続けるだけのヤンチャなプログラマー」になっちゃうので、その際学んだことを書こうかな?というお話。
http接続処理のとこだけ抜粋するんですが、重要なのは「バッファ読み捨て」というところです。
なんでここが重要なの?という話なのですが、バッファを読み捨てないと「http接続が完了する前に、Client側でTCP接続を切断しちゃうから」なのです!
ちなみにバッファ読み捨ての行をコメントアウトしても、レスポンスコードは取得できたりします。
…なんでかはioutilのソースを読むといいんじゃないかなーと思います!
// HTTP接続
func httpRequest(tr *http.Transport) {
// HTTP接続
client := &http.Client{Transport: tr}
r, err := client.Get(url)
if err != nil {
fmt.Println(err)
return
}
// Body Close処理
defer r.Body.Close()
// バッファ読み捨て
io.Copy(ioutil.Discard, r.Body)
// レスポンスコード
response := r.StatusCode
fmt.Println(response)
}
0 件のコメント:
コメントを投稿