Maison > développement back-end > Golang > le corps du texte

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

Linda Hamilton
Libérer: 2024-10-31 20:48:29
original
703 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!