Définir une IP de proxy pour une requête Guzzle
Utiliser l’option proxy par requête de Guzzle et comprendre le délai de connexion dépendant du gestionnaire ainsi que la liste d’exclusion explicite.
L’option proxy de Guzzle accepte une URL complète de point de connexion. Définissez-la sur la requête lorsque seule cette opération doit utiliser l’IP choisie.
<?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();
L’exemple suppose Guzzle 7 installé avec Composer. Remplacez l’adresse documentaire par un vrai proxy HTTP du fournisseur ou de la liste de proxys HTTP. Gardez la destination dans l’URL de requête : le proxy est un intermédiaire, pas la ressource téléchargée.
Ici, http_errors vaut false pour qu’une réponse d’erreur HTTP reste disponible à l’inspection. Les échecs de connexion déclenchent toujours des exceptions de transfert. Un tunnel HTTPS refusé pendant son établissement peut donc échouer avant que vous receviez un objet de réponse ordinaire du site.
Vérifier le gestionnaire si les limites de connexion se comportent différemment
Guzzle peut utiliser différents gestionnaires HTTP. Sa documentation indique que le gestionnaire cURL intégré prend en charge connect_timeout. Un gestionnaire personnalisé ou un environnement sans PHP cURL n’est pas forcément équivalent. Vérifiez celui de l’application avant de supposer qu’une option de délai copiée agit réellement.
Il est aussi utile de définir le timeout global. Les entrées gratuites peuvent cesser de répondre entre deux contrôles ; la valeur par défaut n’est pas une échéance utile pour une requête devant se terminer rapidement.
Utiliser une table de proxys
Une table permet de choisir les routes selon le schéma de destination et de préciser les hôtes qui contournent le proxy :
'proxy' => [
'http' => 'http://203.0.113.10:8080',
'https' => 'http://203.0.113.10:8080',
'no' => [],
],
Utilisez ce tableau à la place de la chaîne. La clé HTTPS sélectionne les destinations HTTPS ; sa valeur HTTP décrit toujours le service d’écoute du proxy. Un autre protocole d’écoute nécessite une autre configuration du point de connexion.
Quand vous fournissez vous-même l’option proxy de la requête, Guzzle attend que vous fournissiez les valeurs no souhaitées au lieu de les copier automatiquement depuis NO_PROXY. Une liste vide est utile pour un test proxy isolé. Si l’application comporte des règles de contournement voulues, conservez-les explicitement.