Integrationer · Mellemliggende niveau

Proxyer i Go og PHP: net/http Transport, x/net/proxy, cURL og Guzzle

Konfigurer en HTTP- eller SOCKS-proxy eksplicit i Go og PHP, hold legitimationsoplysninger ude af logfilerne og sæt timeouts.Eksemplerne dækker http.Transport, cURL og Guzzle; gatewayindstillinger styrer hvilken udgang klienten modtager.

2 min læsning 6 sektioner Gennemgået Redaktionsteamet Proxy Cyber

Gå til: http.Transport#

- Gå.
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))
}

Genbrug af forbindelse og IP-tildeling er forskellige kontrolelementer. En klientsession genbruger sockets, kun den tildelte gateway bestemmer rotation og funktionsmåde for fastlåst session. Brug de sessionsparametre, der leveres med din tjeneste, og bekræft exit over flere anmodninger. Lukning af en socket eller afsendelse af Connection: close garanterer ikke en anden IP.

Gå: Vælg proxy pr. anmodning#

- Gå.
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))
	},
}

Gå til: SOCKS5#

- Gå.
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: Brugergrænseflade#

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: Forbedringer af hjemmesiden#

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

Tjekliste#

  • Brug et særskilt sessions-id til hver uafhængig arbejdsgang, hvor den tildelte gateway understøtter det. Bekræft de tilladte varigheds- og placeringsparametre i dine forbindelsesoplysninger. En hjemmeenhed kan afbryde forbindelsen før den ønskede varighed; en fastlåst session er ikke en garanti for samme IP i dagevis. For en fast adresse skal du sammenligne med et dedikeret statisk produkt.
  • Timeouts skaleret til exit type; et forsøg på transportfejl.
  • Log aldrig proxy URL' en: den indeholder adgangskoden. Log session id i stedet.

Spørgsmål folk stiller#

Virker Go's http.ProxyFromEnvironment?

Ja: Eksporter HTTPS_PROXY og HTTP_PROXy med URL-adressen til nøgleproxy, og brug http.ProxyFromEnvironment som Transports proxyfunktion NO_PROX Y udelukker lokale værter.

Din konto er blevet oprettet

Administrer alle dine proxyer fra én konto

Sammenlign netværk, placer ordrer og følg din saldo og supportanmodninger fra ét dashboard Vores team gennemgår betalinger og giver forbindelsesoplysninger efter levering.

Opret konto