Intégrations · Intermédiaire

Proxies en Go et PHP : net/http Transport, x/net/proxy, cURL et Guzzle

Configurez explicitement un proxy HTTP ou SOCKS dans Go et PHP, conservez les informations d'identification hors des journaux et définissez des délais d'attente. Les exemples couvrent http.Transport, cURL et Guzzle ; les paramètres de la passerelle contrôlent la sortie que le client reçoit.

2 minutes de lecture 6 volets Vérifié Équipe éditoriale Proxy Cyber

Allez : http.Transport#

Allez
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"time"
)

func main() {
	proxyURL, _ := url.Parse("http://USER-cc-us:PASS@res.proxy-cyber.com:9000")
	client := &http.Client{
		Timeout: 45 * time.Second,
		Transport: &http.Transport{
			Proxy:             http.ProxyURL(proxyURL),
			DisableKeepAlives: true, // new connection = new exit on the rotating gateway
		},
	}
	resp, err := client.Get("https://api.ipify.org")
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}

La réutilisation des connexions et l'attribution des adresses IP sont des contrôles différents. Une session client réutilise les sockets ; seule la passerelle attribuée détermine le comportement de rotation et de session persistante. Utilisez les paramètres de session fournis avec votre service et vérifiez la sortie sur plusieurs requêtes. La fermeture d'un socket ou l'envoi de Connection: close ne garantit pas une IP différente.

Go : choisir le proxy par requête#

Allez
tr := &http.Transport{
	Proxy: func(r *http.Request) (*url.URL, error) {
		sid := r.Header.Get("X-Session") // your own hint, never sent to the proxy
		r.Header.Del("X-Session")
		return url.Parse(fmt.Sprintf("http://USER-cc-de-sid-%s-ttl-10m:PASS@res.proxy-cyber.com:9000", sid))
	},
}

Aller : SOCKS5#

Allez
import "golang.org/x/net/proxy"

dialer, err := proxy.SOCKS5("tcp", "res.proxy-cyber.com:9001", &proxy.Auth{User: "USER-cc-us", Password: "PASS"}, proxy.Direct)
if err != nil { panic(err) }
tr := &http.Transport{Dial: dialer.Dial}
client := &http.Client{Transport: tr, Timeout: 45 * time.Second}

PHP : cURL#

PHP
<?php
$ch = curl_init("https://api.ipify.org");
curl_setopt_array($ch, [
    CURLOPT_PROXY          => "http://res.proxy-cyber.com:9000",
    CURLOPT_PROXYUSERPWD   => "USER-cc-us:PASS",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CONNECTTIMEOUT => 15,
    CURLOPT_TIMEOUT        => 45,
    CURLOPT_FORBID_REUSE   => true, // new exit per call on the rotating gateway
]);
echo curl_exec($ch);

// SOCKS5 with remote DNS
curl_setopt($ch, CURLOPT_PROXY, "res.proxy-cyber.com:9001");
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);

PHP : Guzzler#

PHP
<?php
use GuzzleHttp\Client;

$sticky = "http://USER-cc-de-city-berlin-sid-cart42-ttl-15m:PASS@res.proxy-cyber.com:9000";
$client = new Client(['proxy' => $sticky, 'timeout' => 45, 'connect_timeout' => 15]);

$r = $client->get('https://api.ipify.org');
echo $r->getBody();

Liste de contrôle#

  • Utilisez un identifiant de session distinct pour chaque flux de travail indépendant, lorsque la passerelle attribuée le prend en charge. Confirmez la durée autorisée et les paramètres de localisation dans les détails de votre connexion. Un appareil résidentiel peut se déconnecter avant la durée demandée ; une session persistante n'est pas une garantie de la même IP pendant des jours. Pour une adresse fixe, comparez un produit statique dédié.
  • Délais d'attente adaptés au type de sortie ; une nouvelle tentative sur les erreurs de transport.
  • Ne consignez jamais l’URL du proxy : elle contient le mot de passe. Enregistrez plutôt l’identifiant de session.

Les questions que les gens posent#

Le http.ProxyFromEnvironment de Go fonctionne-t-il ?

Oui : exportez HTTPS_PROXY et HTTP_PROXY avec l'URL du Proxy Cyber et utilisez http.ProxyFromEnvironment comme fonction proxy du transport. NO_PROXY exclut les hôtes locaux.

Votre compte

Gérez vos proxys dans un seul compte

Comparez les réseaux, passez des commandes et suivez votre solde et vos demandes d'assistance à partir d'un seul tableau de bord. Notre équipe examine les paiements et fournit les détails de connexion après la livraison.

Créer un compte