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

O fewn pecyn rhwydwaith Go sy'n bodoli, defnyddiwch y mewnforion context, errors, net, time a x/net/proxy. Nid yw'r ymresymiad nil yn dewis unrhyw gymwysterau SOCKS. Ar gyfer cyrchfan gyhoeddus ar lwybr dirprwy gyhoeddus a ganiateir, mae'r rhestr dirprwyon SOCKS5 yn cynnig ymgeiswyr ar gyfer pwynt terfyn y dialer.

Mae'r haeriad proxy.ContextDialer a allforiwyd yn gwneud i weithrediadau heb gefnogaeth fethu'n benodol. Gwiriwch y dibyniaeth a osodwyd yn lle enwi math dialer mewnol neu ddechrau goroutine sy'n rhwystro na all y galwr ei reoli.

Mae'r cyd-destun yn rheoli sefydlu cysylltiad. Unwaith y dychwelir net.Conn, cymhwyswch derfynau darllen/ysgrifennu priodol neu derfynau cais lefel uwch. Mae terfyn amser cysylltiad dialer sylfaenol a chyfanswm cyllideb cymhwysiad yn derfynau gwahanol.

Ar gyfer integreiddio cludiant HTTP, cadwch ei ymddygiad TLS ac HTTP arferol. Y llif SOCKS sy'n ymwybodol o gyd-destun a ddychwelwyd yw'r trosglwyddiad cludiant, nid ymateb nac yn bolisi bywyd ar gyfer pob beit diweddarach.

Erthyglau cysylltiedig