Integrari · Intermediare

Proxies in Go and PHP: net/http Transport, x/net/proxy, cURL și Guzzle

Configurați un proxy HTTP sau SOCKS explicit în Go și PHP, păstrați acreditările din jurnale, și setați timeouts. Exemplele acoperă http.Transport, cURL și Guzzle; setări de acces de control care iese clientul primește.

2 min citește 6 secţiuni Revizuit Echipa editorială Proxy Cyber

Transporturi#

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

Refolosirea conexiunii și alocarea IP sunt controale diferite. O sesiune de client reutilizează prizele; numai poarta atribuită determină rotație și comportamentul lipicios-sesiune. Utilizați parametrii sesiunii furnizate cu serviciul dvs., și verificați ieșirea peste mai multe cereri. Închiderea unei prize sau trimiterea Conexiunii: închide nu garantează un IP diferit.

Du-te: alegerea proxy pe cerere#

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

Du-te: SOCKS5#

Dute
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: 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 de verificare#

  • Utilizaţi un identificator de sesiune distinct pentru fiecare flux de lucru independent, în cazul în care poarta atribuită o sprijină. Confirmaţi durata permisă şi parametrii de localizare în detaliile de conectare. Un dispozitiv rezidenţial se poate deconecta înainte de durata solicitată; o sesiune lipicioasă nu este o garanţie a aceluiaşi IP pentru zile. Pentru o adresă fixă, comparaţi un produs static dedicat.
  • Timeouts s-a scalat la tipul de ieșire; o nouă încercare privind erorile de transport.
  • Nu logați URL-ul proxy: conține parola. Autentifică id-ul sesiunii în schimb.

Întrebări pe care oamenii le pun#

Go's http.ProxyFromMediul funcționează?

Da: exportă HTTPS PROXY și HTTP PROXY cu URL-ul cheie Proxy și utilizează http.proxyFromMediu ca funcția Proxy Transport. NO PROXY exclude gazdele locale.

Contul dumneavoastră

Administrează toate proxy-urile într-un singur cont

Comparați rețelele, plasați comenzile și urmați cererile de echilibru și suport de la un tablou de bord. Echipa noastră evaluează plățile și oferă detalii de conexiune după livrare.

Creează cont