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)
}

Brenda një pakete ekzistuese rrjeti Go, përdorni importet context, errors, net, time dhe x/net/proxy. Argumenti nil nuk zgjedh kredenciale SOCKS. Për një destinacion publik në një rrugë proxy publik të lejuar, lista e proxy-ve SOCKS5 ofron kandidatë për pikën fundore të dialer-it.

Pohimi i eksportuar proxy.ContextDialer i bën implementimet e pambështetura të dështojnë në mënyrë eksplicite. Kontrolloni varësinë e vendosur në vend që të emërtoni një tip dialer të brendshëm ose të nisni një goroutine bllokuese që thirrësi nuk mund ta menaxhojë.

Konteksti drejton vendosjen e lidhjes. Pasi kthehet një net.Conn, aplikoni afate të përshtatshme leximi/shkrimi ose afate kërkese të nivelit më të lartë. Afati i lidhjes së dialer-it bazë dhe buxheti total i një aplikacioni janë kufij të ndryshëm.

Për një integrim të transportit HTTP, ruani sjelljen normale TLS dhe HTTP. Rrjedha SOCKS e vetëdijshme për kontekstin që kthehet është dorëzimi te transporti, jo një përgjigje dhe as një politikë jetëgjatësie për të gjitha bajtët e mëvonshëm.

Artikuj të ngjashëm