Allez : http.Transport#
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#
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#
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
$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
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.