Maison  >  Article  >  développement back-end  >  Comment forcer le client net/http à utiliser IPv4/IPv6 dans Golang ?

Comment forcer le client net/http à utiliser IPv4/IPv6 dans Golang ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-01 00:46:28812parcourir

How to Force net/http Client to Use IPv4/IPv6 in Golang?

Comment forcer le client net/http à utiliser IPv4/IPv6 dans Golang

Dans Golang, la bibliothèque net/http fournit un transport flexible couche qui régit la manière dont les requêtes HTTP sont effectuées. Une exigence courante consiste à imposer l’utilisation d’IPv4 ou d’IPv6 pour les connexions sortantes. Ceci est particulièrement utile pour les scénarios dans lesquels l'accessibilité d'un domaine doit être testée spécifiquement sur un protocole ou un autre.

Pour y parvenir, vous pouvez modifier le transport HTTP sous-jacent en spécifiant une fonction DialContext personnalisée. Cette fonction permet d'intercepter et potentiellement de modifier le processus d'établissement de la connexion. Voici comment procéder :

<code class="go">import (
    "errors"
    "fmt"
    "net"
    "net/http"
    "syscall"
    "time"
)

func modifiedTransport() {
    var myTransport = &http.Transport{
        DialContext: (&net.Dialer{
            Timeout:   30 * time.Second,
            KeepAlive: 30 * time.Second,
            DualStack: false,
            Control: func(network, address string, c syscall.RawConn) error {
                if network == "ipv4" {
                    // Here you can return an error to prevent connection establishment over IPv4.
                    return errors.New("ipv4 connections are not allowed")
                }
                return nil
            },
        }).DialContext,
        MaxIdleConns:          100,
        IdleConnTimeout:       90 * time.Second,
        TLSHandshakeTimeout:   10 * time.Second,
        ExpectContinueTimeout: 1 * time.Second,
    }

    var myClient = http.Client{Transport: myTransport}
    resp, err := myClient.Get("http://www.github.com")
    if err != nil {
        fmt.Println("Request error:", err)
        return
    }

    var buffer = make([]byte, 1000)
    resp.Body.Read(buffer)
    fmt.Println(string(buffer))
}</code>

Dans cet exemple, nous créons une fonction DialContext personnalisée dans le transport modifié. Lorsqu'une tentative de connexion est lancée, cette fonction sera invoquée et interceptera le type de réseau utilisé. Si le réseau est IPv4 (indiqué par « ipv4 » comme valeur du paramètre réseau), vous pouvez spécifier les actions appropriées, telles que renvoyer une erreur pour empêcher l'établissement de la connexion sur IPv4. Cela vous permet d'imposer l'utilisation d'IPv6 pour la requête.

En utilisant le transport personnalisé et sa fonction DialContext modifiée, vous pouvez contrôler efficacement si vos requêtes HTTP sont effectuées sur IPv4 ou IPv6, offrant ainsi une plus grande flexibilité dans la gestion. connectivité réseau.

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