Maison  >  Article  >  développement back-end  >  Comment forcer les connexions IPv4 ou IPv6 dans le client net/http de Go ?

Comment forcer les connexions IPv4 ou IPv6 dans le client net/http de Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-31 20:48:29683parcourir

How to force IPv4 or IPv6 connections in Go's net/http Client?

Forcer IPv4 ou IPv6 dans le client net/http de Go

Dans Go, le package net/http fournit un client HTTP polyvalent pour effectuer des requêtes . Elle offre une flexibilité dans la personnalisation du comportement du client à travers son domaine Transport. Cet article explique comment forcer le client à utiliser IPv4 ou IPv6 lors de l'établissement de connexions.

Détection des domaines IPv6 uniquement

Pour déterminer si un domaine est IPv6- uniquement, nous pouvons créer une fonction DialContext personnalisée qui vérifie le paramètre réseau passé à la méthode Control. Si le réseau est "tcp4", cela indique une connexion IPv4 uniquement et nous pouvons annuler la connexion.

<code class="go">func ModifiedTransport() {
    var MyTransport = &amp;http.Transport{
        DialContext: (&amp;net.Dialer{
            DualStack: false,
            Control: func(network, address string, c syscall.RawConn) error {
                if network == "tcp4" {
                    return errors.New("you should not use ipv4")
                }
                return nil
            },
        }).DialContext,
        MaxIdleConns:          100,
        IdleConnTimeout:       90 * time.Second,
        TLSHandshakeTimeout:   10 * time.Second,
        ExpectContinueTimeout: 1 * time.Second,
    }

    var myClient = http.Client{Transport: MyTransport}
    resp, myerr := myClient.Get("http://www.github.com")
    if myerr != nil {
        fmt.Println("request error")
        return
    }
}</code>

Forcer les connexions IPv6

Pour forcer une Connexion IPv6, nous pouvons spécifier "tcp6" comme paramètre réseau dans la fonction Contrôle :

<code class="go">func ModifiedTransport() {
    var MyTransport = &amp;http.Transport{
        DialContext: (&amp;net.Dialer{
            DualStack: false,
            Control: func(network, address string, c syscall.RawConn) error {
                if network != "tcp6" {
                    return errors.New("you should use ipv6")
                }
                return nil
            },
        }).DialContext,
        MaxIdleConns:          100,
        IdleConnTimeout:       90 * time.Second,
        TLSHandshakeTimeout:   10 * time.Second,
        ExpectContinueTimeout: 1 * time.Second,
    }

    var myClient = http.Client{Transport: MyTransport}
}</code>

En contrôlant le paramètre réseau dans la fonction Contrôle, nous pouvons appliquer la connectivité IPv4 ou IPv6 comme nous le souhaitons. Cette approche offre une flexibilité dans la personnalisation du comportement du client net/http de Go pour des exigences de réseau spécifiques.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn