ສັງເກດສະຖານະ CONNECT ຂອງ Go ໃນ OnProxyConnectResponse
ຕິດຕັ້ງ hook ໃສ່ transport ກ່ອນຄຳຮ້ອງ; ການສົ່ງຄືນ nil ຮັກສາການກວດສະຖານະອຸໂມງປົກກະຕິ.
transport := http.DefaultTransport.(*http.Transport).Clone()
transport.Proxy = http.ProxyURL(proxyURL)
transport.OnProxyConnectResponse = func(
_ context.Context,
_ *url.URL,
_ *http.Request,
response *http.Response,
) error {
observeConnect(response.StatusCode, response.Header.Get("X-Proxy-Region"))
return nil
}
client := &http.Client{Transport: transport}ໃຊ້ context, net/http ແລະ net/url; ການຢືນຢັນປະເພດມາດຕະຖານສົມມຸດວ່າ transport ນັ້ນຍັງຕິດຕັ້ງຢູ່. proxyURL ຖືກແຍກວິເຄາະ, ແລະ observeConnect ຕ້ອງປອດໄພຕໍ່ການເຮັດວຽກພ້ອມກັນ. ສຳລັບການທົດສອບ HTTPS ສາທາລະນະທີ່ອະນຸຍາດ ລາຍຊື່ HTTP proxy ສະໜອງຜູ້ສະໝັກສຳລັບ proxy URL ນັ້ນ.
Callback ເຮັດວຽກກ່ອນການກວດ CONNECT ສຳລັບ 200 ທີ່ສຳເລັດ, ດັ່ງນັ້ນມັນສາມາດສັງເກດ 407 ໄດ້ນຳ. Nil ສືບຕໍ່ການກວດປົກກະຕິ ແລະ ບໍ່ຮັບອຸໂມງທີ່ຖືກປະຕິເສດ; ຄວາມຜິດພາດເຮັດໃຫ້ຄຳຮ້ອງລົ້ມເຫລວ.
X-Proxy-Region ເປັນຕົວຢ່າງທີ່ກຳນົດໂດຍຜູ້ໃຫ້ບໍລິການ. ອ່ານສະຖານະ ແລະ ຫົວຂໍ້ຢູ່ນີ້ ແລະ ປ່ອຍຄວາມເປັນເຈົ້າຂອງ body ແລະ socket ໃຫ້ Transport, ເຊິ່ງຈະຈັດການ TLS ປາຍທາງ.
ນີ້ສັງເກດການຕັ້ງອຸໂມງໃໝ່, ບໍ່ແມ່ນທຸກຄຳຮ້ອງ. ການເຊື່ອມຕໍ່ທີ່ໃຊ້ຄືນບໍ່ມີການຕອບ CONNECT ໃໝ່, ແລະ ການຕອບຂອງເວັບໄຊມີຫົວຂໍ້ແຍກຕ່າງຫາກ.