Definir um IP de proxy para uma solicitação Guzzle
Use a opção proxy por solicitação do Guzzle e entenda o tempo de conexão dependente do handler e a lista explícita de desvios.
A opção proxy do Guzzle aceita uma URL completa do ponto de conexão. Defina-a na solicitação quando apenas essa operação deva usar o IP escolhido.
<?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();
O exemplo pressupõe o Guzzle 7 instalado pelo Composer. Substitua o endereço de documentação por um proxy HTTP real do provedor ou da lista de proxies HTTP. Mantenha o destino na URL da solicitação: o proxy é intermediário, não o recurso baixado.
Aqui http_errors é false para que a resposta de erro HTTP continue disponível para inspeção. Falhas de conexão ainda lançam exceções de transferência. Um túnel HTTPS rejeitado durante a configuração pode falhar antes de você receber um objeto de resposta comum do site.
Confira o handler quando os limites de conexão se comportarem diferente
O Guzzle pode usar diferentes handlers HTTP. A documentação informa que o handler cURL integrado aceita connect_timeout. Um handler personalizado ou ambiente sem PHP cURL não é necessariamente equivalente. Verifique o handler usado pelo aplicativo antes de supor que uma opção de tempo copiada está surtindo efeito.
Também vale definir o timeout total. Entradas de listas grátis podem parar de responder entre verificações, e o padrão não é um prazo útil para uma solicitação que precisa terminar rapidamente.
Usar um mapa de proxies
Um mapa permite escolher rotas pelo esquema do destino e informar explicitamente hosts que dispensam o proxy:
'proxy' => [
'http' => 'http://203.0.113.10:8080',
'https' => 'http://203.0.113.10:8080',
'no' => [],
],
Use esse array no lugar da opção em string. A chave HTTPS seleciona destinos HTTPS; seu valor HTTP ainda descreve o listener do proxy. Um protocolo de escuta diferente exige outra configuração do ponto de conexão.
Ao fornecer a opção proxy da solicitação, o Guzzle espera que você forneça os valores no pretendidos, em vez de copiá-los automaticamente de NO_PROXY. Uma lista vazia é útil para um teste isolado de proxy. Em um aplicativo com regras deliberadas de desvio, preserve-as explicitamente.