Integrazioni · Intermedio

Proxy in Go e PHP: trasporto net/http, x/net/proxy, cURL e Guzzle

Configura esplicitamente un proxy HTTP o SOCKS in Go e PHP, mantieni le credenziali fuori dai log e imposta i timeout. Gli esempi riguardano http.Transport, cURL e Guzzle; le impostazioni del gateway controllano quale uscita riceve il client.

2 minuti di lettura 6 sezioni Verificato Redazione Proxy Cyber

Vai: http.Trasporti#

Vai
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))
}

Il riutilizzo della connessione e l'assegnazione dell'IP sono controlli diversi. Una sessione client riutilizza i socket; solo il gateway assegnato determina la rotazione e il comportamento della sessione permanente. Utilizza i parametri di sessione forniti con il tuo servizio e verifica l'uscita su più richieste. La chiusura di un socket o l'invio di Connection: close non garantisce un IP diverso.

Vai: scegliendo il proxy per richiesta#

Vai
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))
	},
}

Vai: CALZINI5#

Vai
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: arricciatura#

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: Guzzle#

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();

Lista di controllo#

  • Utilizza un identificatore di sessione distinto per ciascun flusso di lavoro indipendente, laddove il gateway assegnato lo supporti. Conferma la durata consentita e i parametri di posizione nei dettagli della connessione. Un dispositivo residenziale può disconnettersi prima della durata richiesta; una sessione persistente non è garanzia dello stesso IP per giorni. Per un indirizzo fisso, confronta un prodotto statico dedicato.
  • Timeout adattati al tipo di uscita; un tentativo in caso di errori di trasporto.
  • Non registrare mai l'URL del proxy: contiene la password. Registra invece l'ID di sessione.

Domande che le persone fanno#

http.ProxyFromEnvironment di Go funziona?

Sì: esporta HTTPS_PROXY e HTTP_PROXY con l'URL del proxy chiave e utilizza http.ProxyFromEnvironment come funzione proxy del trasporto. NO_PROXY esclude gli host locali.

Il tuo conto

Gestisci i tuoi proxy in un unico account

Confronta reti, effettua ordini e segui il tuo saldo e le richieste di supporto da un'unica dashboard. Il nostro team esamina i pagamenti e fornisce i dettagli di connessione dopo la consegna.

Crea un account