transport ຂອງ HTTP client ໃນ Go ເປັນຜູ້ເລືອກພຣັອກຊີ. ໂຄລນ transport ມາດຕະຖານກ່ອນປ່ຽນ ເພື່ອໃຫ້ຜູ້ໃຊ້ client ເລີ່ມຕົ້ນສ່ວນອື່ນຮັກສາເສັ້ນທາງເດີມ.

package main

import (
    "fmt"
    "io"
    "log"
    "net/http"
    "net/url"
    "time"
)

func main() {
    proxyURL, err := url.Parse("http://203.0.113.10:8080")
    if err != nil {
        log.Fatal(err)
    }

    transport := http.DefaultTransport.(*http.Transport).Clone()
    transport.Proxy = http.ProxyURL(proxyURL)
    defer transport.CloseIdleConnections()

    client := &http.Client{
        Transport: transport,
        Timeout:   15 * time.Second,
    }

    response, err := client.Get("https://example.com/")
    if err != nil {
        log.Fatal(err)
    }
    defer response.Body.Close()

    fmt.Println(response.StatusCode)
    if _, err := io.Copy(io.Discard, response.Body); err != nil {
        log.Fatal(err)
    }
}

ທີ່ຢູ່ນີ້ເປັນຄ່າຕົວຢ່າງໃນເອກະສານ. ປ່ຽນເປັນ IP ແລະພອດຂອງພຣັອກຊີ HTTP ແທ້ ເຊັ່ນຕົວເລືອກຈາກລາຍການພຣັອກຊີ HTTP. ຕົວຢ່າງໃຊ້ແຕ່ຫ້ອງສະໝຸດມາດຕະຖານຂອງ Go; ຄຳຮ້ອງຂໍພຣັອກຊີ HTTP ນີ້ບໍ່ຕ້ອງມີແພັກເກດ SOCKS ຫຼືຕົວແປສະພາບແວດລ້ອມສຳລັບທັງໂປຣເຊສ.

ເປັນຫຍັງບໍ່ແກ້ DefaultTransport ໂດຍກົງ?

transport ເລີ່ມຕົ້ນຖືກໃຊ້ຮ່ວມກັນ. ການປ່ຽນອາດກະທົບໂຄດທີ່ບໍ່ເຄີຍຂໍໃຊ້ພຣັອກຊີຂອງທ່ານ ແລະປ່ຽນຂະນະຄຳຮ້ອງຂໍກຳລັງໃຊ້ມັນຈະສ້າງບັນຫາການເຮັດວຽກພ້ອມກັນທີ່ຫຼີກໄດ້. transport ສະເພາະເຮັດໃຫ້ເສັ້ນທາງເປັນສ່ວນຂອງການຕັ້ງຄ່າ client ນີ້.

http.ProxyURL ສົ່ງຄືນຕົວເລືອກທີ່ເລືອກ URL ທີ່ໃຫ້ສະເໝີ. ມັນຕ່າງຈາກຕົວເລືອກສະພາບແວດລ້ອມເລີ່ມຕົ້ນ ທີ່ຄິດເຖິງຕົວແປພຣັອກຊີ ແລະກົດຂ້າມ. ຖ້າຢາກທົດສອບລາຍການ HTTP ທີ່ລະບຸອັນດຽວ ຕົວເລືອກທີ່ຊັດເຈນຈະຕັດແຫຼ່ງຄວາມກຳກວມນີ້ອອກ.

ປິດຄຳຕອບ ແລະນຳ client ກັບມາໃຊ້ຊ້ຳ

ຕົວຢ່າງອ່ານເນື້ອຫາຄຳຕອບຈົນໝົດແລ້ວປິດ. ອ່ານຈົນຈົບຊ່ວຍ transport ໃຊ້ການເຊື່ອມຕໍ່ຊ້ຳເມື່ອເຮັດໄດ້. ໃນໂປຣແກຣມທີ່ສົ່ງຫຼາຍຄຳຮ້ອງຂໍຜ່ານພຣັອກຊີດຽວກັນ ໃຫ້ເກັບ client ແລະ transport ໄວ້ ແທນການສ້າງຄູ່ໃໝ່ທຸກຄຳຮ້ອງຂໍ.

ເວລາຈຳກັດຂອງ client ບໍ່ໄດ້ຄຸມແຕ່ເປີດຊັອກເກັດ ແຕ່ຈຳກັດວົງຈອນຄຳຮ້ອງຂໍ ລວມທັງອ່ານເນື້ອຫາຄຳຕອບ. ຍັງຕ້ອງຈັດການຂໍ້ຜິດພາດການອ່ານຫຼັງ Get ສົ່ງຄືນ. ສະຖານະເຊັ່ນ 403 ບໍ່ແມ່ນຂໍ້ຜິດພາດ transport ຂອງ Go ຈຶ່ງຕ້ອງກວດ StatusCode ແຍກຈາກ err.

ບົດຄວາມທີ່ກ່ຽວຂ້ອງ