func dialViaSOCKS(ctx context.Context, destination string) (net.Conn, error) {
    dialer, err := proxy.SOCKS5(
        "tcp",
        "127.0.0.1:1080",
        nil,
        &net.Dialer{Timeout: 5 * time.Second},
    )
    if err != nil {
        return nil, err
    }
    contextDialer, ok := dialer.(proxy.ContextDialer)
    if !ok {
        return nil, errors.New("SOCKS dialer lacks context support")
    }
    return contextDialer.DialContext(ctx, "tcp", destination)
}

Бар Go желілік пакетінің ішінде context, errors, net, time және x/net/proxy импорттарын пайдаланыңыз. nil аргументі ешқандай SOCKS тіркелгі деректерін таңдамайды. Рұқсат етілген жалпыға ортақ прокси бағытындағы жалпыға ортақ тағайындау үшін SOCKS5 прокси тізімі dialer-дің соңғы нүктесі үшін үміткерлерді ұсынады.

Экспортталған proxy.ContextDialer дәлелі қолдау көрсетілмейтін іске асырулардың анық сәтсіз болуына әкеледі. Ішкі dialer түрін атаудың немесе шақырушы басқара алмайтын блоктайтын goroutine іске қосудың орнына орналастырылған тәуелділікті тексеріңіз.

Контекст қосылымды орнатуды басқарады. net.Conn қайтарылғаннан кейін тиісті оқу/жазу немесе жоғары деңгейдегі сұрау мерзімдерін қолданыңыз. Негізгі dialer қосылымының тайм-ауты мен қолданбаның жалпы бюджеті әр түрлі шектеулер.

HTTP көлігін біріктіру үшін оның қалыпты TLS және HTTP әрекетін сақтаңыз. Қайтарылған контексті білетін SOCKS ағыны көлікке тапсыру болып табылады, жауап та, барлық кейінгі байттар үшін өмір сүру саясаты да емес.

Қатысты мақалалар