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

Dans un paquet réseau Go existant, utilisez les imports context, errors, net, time et x/net/proxy. L'argument nil ne sélectionne aucun identifiant SOCKS. Pour une destination publique sur une route de proxy public autorisée, la liste de proxys SOCKS5 propose des candidats pour le point de terminaison du dialer.

L'assertion exportée proxy.ContextDialer fait échouer explicitement les implémentations non prises en charge. Vérifiez la dépendance déployée au lieu de nommer un type de dialer interne ou de démarrer une goroutine bloquante que l'appelant ne peut pas gérer.

Le contexte régit l'établissement de la connexion. Une fois un net.Conn renvoyé, appliquez des échéances de lecture/écriture adaptées ou des échéances de requête de niveau supérieur. Le délai de connexion d'un dialer de base et le budget total d'une application sont des limites différentes.

Pour une intégration de transport HTTP, conservez son comportement TLS et HTTP normal. Le flux SOCKS sensible au contexte renvoyé est la remise au transport, non une réponse ni une politique de durée de vie pour tous les octets ultérieurs.

Articles similaires