Angiv en proxy-IP til en Guzzle-forespørgsel
Brug Guzzles proxyindstilling pr. forespørgsel, og forstå handlerafhængig forbindelsestimeout og eksplicitte undtagelseslister.
Guzzles proxy-indstilling accepterer en fuld endepunkt-URL. Angiv den på forespørgslen, når kun denne handling skal bruge den valgte IP.
<?php
require __DIR__ . '/vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://example.com/', [
'proxy' => 'http://203.0.113.10:8080',
'connect_timeout' => 5,
'timeout' => 15,
'http_errors' => false,
]);
echo $response->getStatusCode(), PHP_EOL;
echo (string) $response->getBody();
Eksemplet forudsætter Guzzle 7 installeret via Composer. Erstat dokumentationsadressen med en rigtig HTTP-proxy fra udbyderen eller listen over HTTP-proxyer. Behold destinationen i forespørgslens URL: proxyen er mellemled, ikke den ressource, der hentes.
Her er http_errors false, så et HTTP-fejlsvar stadig kan undersøges. Forbindelsesfejl kaster fortsat overførselsundtagelser. En HTTPS-tunnel afvist under oprettelsen kan derfor fejle, før du modtager et almindeligt svarobjekt fra webstedet.
Kontroller handleren, hvis forbindelsesgrænser opfører sig anderledes
Guzzle kan bruge forskellige HTTP-handlere. Dokumentationen siger, at den indbyggede cURL-handler understøtter connect_timeout. En brugerdefineret handler eller et miljø uden PHP cURL er ikke nødvendigvis tilsvarende. Kontroller applikationens handler, før du antager, at en kopieret timeoutindstilling virker.
Det er også værd at sætte den samlede timeout. Gratislisteposter kan holde op med at svare mellem kontroller, og standarden er ikke en nyttig frist for en forespørgsel, der skal afsluttes hurtigt.
Brug et proxykort
Et kort lader dig vælge ruter efter destinationens skema og angive eksplicitte værter, som skal omgå proxyen:
'proxy' => [
'http' => 'http://203.0.113.10:8080',
'https' => 'http://203.0.113.10:8080',
'no' => [],
],
Brug dette array i stedet for strengindstillingen. HTTPS-nøglen vælger HTTPS-destinationer; dens HTTP-værdi beskriver stadig proxyens lytter. En anden lytterprotokol kræver en anden endepunktkonfiguration.
Når du selv leverer proxyindstillingen til forespørgslen, forventer Guzzle, at du også angiver de ønskede no-værdier frem for automatisk at kopiere dem fra NO_PROXY. En tom liste er nyttig til en isoleret proxytest. Har applikationen bevidste omgåelsesregler, skal du bevare dem eksplicit.