Maison  >  Article  >  développement back-end  >  Parlons de la façon de configurer un proxy dans Golang

Parlons de la façon de configurer un proxy dans Golang

PHPz
PHPzoriginal
2023-04-14 14:42:244457parcourir

Golang est un langage de programmation rapide, efficace et simultané. C'est l'un des langages de programmation les plus populaires actuellement. Lorsque vous effectuez une programmation réseau, vous devrez peut-être configurer un proxy pour accéder à des sites Web restreints. Dans cet article, nous apprendrons comment configurer un proxy dans Golang.

Un proxy est un serveur intermédiaire utilisé pour connecter les clients et les serveurs cibles. Lorsqu'un client établit une connexion avec un serveur proxy, le serveur proxy envoie une requête au serveur cible au nom du client. Le serveur cible renvoie la réponse au serveur proxy, qui à son tour renvoie la réponse au client. De cette manière, les clients peuvent accéder à des ressources qui seraient autrement inaccessibles.

Les proxys courants incluent le proxy HTTP et le proxy SOCKS. Dans Golang, nous pouvons configurer le proxy en définissant des variables d'environnement. Plus précisément, nous pouvons définir les variables d'environnement HTTP_PROXY et HTTPS_PROXY ou la variable d'environnement ALL_PROXY (auquel cas le proxy s'appliquera à tous les protocoles). Si votre agent nécessite une authentification, vous devrez également définir le nom d'utilisateur et le mot de passe de l'agent.

Voici les étapes pour configurer le proxy dans Golang :

Étape 1 : Définir le proxy HTTP

Définissez le proxy HTTP dans le terminal, par exemple :

export HTTP_PROXY=http://proxy.example.com:8080

Supposons que le serveur proxy est "proxy.example.com" et que le port est "8080".

Définissez le proxy HTTP dans le programme Golang, par exemple :

package main

import (
    "fmt"
    "net/http"
    "os"
)

func main() {
    client := &http.Client{}
    req, err := http.NewRequest("GET", "http://example.com", nil)
    if err != nil {
        fmt.Println("Error creating request:", err)
        os.Exit(1)
    }
    req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36")
    resp, err := client.Do(req)
    if err != nil {
        fmt.Println("Error executing request:", err)
        os.Exit(1)
    }
    fmt.Println("Response status:", resp.Status)
}

Le programme ci-dessus enverra une requête GET à "http://example.com" et imprimera l'état de la réponse. Ce programme utilisera le proxy spécifié par la variable d'environnement HTTP_PROXY. Vous pouvez modifier les paramètres du proxy en définissant la variable d'environnement HTTP_PROXY.

Étape 2 : Configurer le proxy HTTPS

De même, vous pouvez configurer le proxy HTTPS en définissant la variable d'environnement HTTPS_PROXY.

export HTTPS_PROXY=https://proxy.example.com:8080

Utilisation du proxy HTTPS dans le programme Golang :

package main

import (
    "crypto/tls"
    "fmt"
    "net/http"
    "os"
)

func main() {
    tr := &http.Transport{
        TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
    }
    client := &http.Client{Transport: tr}
    req, err := http.NewRequest("GET", "https://example.com", nil)
    if err != nil {
        fmt.Println("Error creating request:", err)
        os.Exit(1)
    }
    req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36")
    resp, err := client.Do(req)
    if err != nil {
        fmt.Println("Error executing request:", err)
        os.Exit(1)
    }
    fmt.Println("Response status:", resp.Status)
}

Le programme ci-dessus enverra une requête GET à "https://example.com" et imprimera l'état de la réponse. Ce programme utilisera le proxy spécifié par la variable d'environnement HTTPS_PROXY. Vous pouvez modifier les paramètres du proxy en définissant la variable d'environnement HTTPS_PROXY. Notez que pour les requêtes HTTPS, nous devons créer un objet Transport et définir InsecureSkipVerify sur true pour la configuration du client TLS afin que nous puissions vérifier le certificat nous-mêmes.

Étape 3 : Configurer le proxy SOCKS

Vous pouvez également utiliser le proxy SOCKS. Le proxy SOCKS n'est pas basé sur les protocoles HTTP et HTTPS, mais sur le protocole SOCKS. Définissez le proxy SOCKS dans le terminal :

export ALL_PROXY=socks5://proxy.example.com:1080

Définissez le proxy SOCKS dans le programme Golang :

package main

import (
    "fmt"
    "golang.org/x/net/proxy"
    "net/http"
    "os"
)

func main() {
    dialer, err := proxy.SOCKS5("tcp", "proxy.example.com:1080", nil, proxy.Direct)
    if err != nil {
        fmt.Println("Error setting up SOCKS5 proxy:", err)
        os.Exit(1)
    }
    transport := &http.Transport{Dial: dialer.Dial}
    client := &http.Client{Transport: transport}
    req, err := http.NewRequest("GET", "http://example.com", nil)
    if err != nil {
        fmt.Println("Error creating request:", err)
        os.Exit(1)
    }
    req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36")
    resp, err := client.Do(req)
    if err != nil {
        fmt.Println("Error executing request:", err)
        os.Exit(1)
    }
    fmt.Println("Response status:", resp.Status)
}

Le programme ci-dessus enverra une requête GET à "http://example.com" et imprimera l'état de la réponse. Ce programme utilisera le proxy SOCKS spécifié par la variable d'environnement ALL_PROXY. Vous pouvez configurer des proxys pour tous les protocoles en définissant la variable d'environnement ALL_PROXY.

Résumé

Vous pouvez configurer les proxys HTTP, HTTPS et SOCKS dans Golang en définissant les variables d'environnement HTTP_PROXY, HTTPS_PROXY et ALL_PROXY. Cela rend Golang plus flexible pour la programmation réseau par rapport aux autres langages de programmation.

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