cURL request using SOCKS5 proxy échoue en utilisant PHP, mais il fonctionne via la ligne de commande
cURL + proxy noob ici, avoir un moment difficile. J'ai du mal à récupérer une page Web à partir d'un serveur sécurisé à distance via un proxy. Tout a apparemment été configuré correctement par un dev distant, de sorte que l'instruction en ligne de commande suivante fonctionne et retourne ce que nous recherchons:
curl -k --socks5-hostname localhost:xxxx https://hostname/
cependant, le PHP suivant ne fait pas écho à la page Web demandée. Au lieu de cela, il fait écho à l'erreur "Couldn't resolve host name":
$proxy = 'localhost:xxxx';
$url = 'https://hostname/';
//$proxyauth = 'user:password';
$ch = curl_init();
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
//curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxyauth);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_URL, $url);
$curl_scraped_page = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
if ($error)
echo $error;
elseif ($curl_scraped_page)
echo $curl_scraped_page;
si l'url $est changée en une page publique, comme Google, la requête est réussie et tout le monde est heureux.
la connexion nécessite un tunnel SSH si cela change quoi que ce soit. Le tunnel est ouvert et fonctionnel, comme le prouve la demande en ligne de commande.
y a-t-il quelque chose d'évident qui manque ici?
1 réponses
on dirait que CURLPROXY_SOCKS5_HOSTNAME n'est pas défini dans PHP, mais vous pouvez explicitement utiliser sa valeur qui est égale à 7.
essayez ceci:
curl_setopt($ch, CURLOPT_PROXYTYPE, 7);