Use um IP de proxy com PHP cURL
Configure um proxy HTTP ou SOCKS em um handle PHP cURL, mantenha a URL do site separada e diferencie erros de transporte de respostas HTTP.
Mantenha o site em curl_init() e configure o intermediário nesse handle. PHP precisa da extensão cURL; um executável curl funcionando no terminal não comprova que a extensão esteja disponível.
<?php
$ch = curl_init('https://example.com/');
curl_setopt_array($ch, [
CURLOPT_PROXY => 'http://203.0.113.10:8080',
CURLOPT_PROXYTYPE => CURLPROXY_HTTP,
CURLOPT_NOPROXY => '',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 5,
CURLOPT_TIMEOUT => 15,
]);
$body = curl_exec($ch);
if ($body === false) {
throw new RuntimeException(curl_error($ch), curl_errno($ch));
}
echo curl_getinfo($ch, CURLINFO_RESPONSE_CODE), PHP_EOL;
echo $body;Substitua o IP e a porta de documentação pelo seu proxy HTTP ou por uma entrada da lista de proxies HTTP. CURLOPT_NOPROXY limpa as regras de desvio para este teste; CURLOPT_RETURNTRANSFER retorna o corpo em vez de enviá-lo ao navegador. O limite de conexão restringe o estabelecimento, e o tempo limite global limita a operação cURL.
Para um endpoint SOCKS5, substitua as opções de proxy HTTP antes de curl_exec():
curl_setopt($ch, CURLOPT_PROXY, '203.0.113.10:1080');
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);CURLPROXY_SOCKS5_HOSTNAME delega o DNS do destino ao servidor SOCKS. Use o protocolo informado; a porta 1080 sozinha não o identifica. Nenhuma das opções exige desativar a verificação do certificado do site.
Teste $body === false de forma estrita. Um corpo vazio pode ser uma transferência bem-sucedida, enquanto uma falha no túnel pode ocorrer antes de qualquer resposta do site. Por outro lado, um corpo não vazio pode acompanhar 403, 404 ou 429. Leia CURLINFO_RESPONSE_CODE junto com o resultado de erro do cURL para decidir se a requisição concluída atende à sua tarefa.