cURL request using socks5 proxy fails when using PHP, but it works through the command line
curl, php, proxy, socks, ssh-tunnel
Solution
You need to set option `CURLOPT_PROXYTYPE` to `CURLPROXY_SOCKS5_HOSTNAME`, which sadly wasn't defined in old PHP versions, circa pre-5.6; if you have earlier in but you can explicitly use its value, which is equal to `7`:
curl_setopt($ch, CURLOPT_PROXYTYPE, 7);
Problem
cURL + proxy noob here, having a hard time. I'm having trouble trying to retrieve a web page from a remote secure server via a proxy. Everything has apparently been set up correctly by a remote dev, such that the following command line instruction works and returns what we're looking for: ``` curl -k --socks5-hostname localhost:xxxx https://hostname/ ``` However, the following PHP does not echo the requested webpage. Instead it echoes the error '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; ``` If the $url is changed to a public page, such as Google, the request is successful and everyone is happy. The connection requires an SSH tunnel if that changes anything at all. The tunnel is open and functioning, as proven by the command line request succeeding. Is there something obvious that is being missed here?