cURL + proxy noob здесь, имея трудное время. У меня возникли проблемы с попыткой получить веб-страницу с удаленного защищенного сервера через прокси. Все, по-видимому, правильно настроено удаленным разработчиком, так что следующая команда командной строки работает и возвращает то, что мы ищем:
curl -k --socks5-hostname localhost:xxxx https://hostname/
Однако следующий PHP не повторяет запрошенную веб-страницу. Вместо этого он повторяет ошибку «Не удалось разрешить имя хоста»:
$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;
Если $ url будет изменен на общедоступную страницу, например Google, запрос будет успешным, и все будут счастливы.
Для соединения требуется SSH-туннель, если это вообще что-то изменит. Туннель открыт и функционирует, что подтверждается запросом командной строки.
Есть ли что-то очевидное, что здесь пропущено?
Похоже, что CURLPROXY_SOCKS5_HOSTNAME не определен в PHP, но вы можете явно использовать его значение, равное 7.
Попробуй это:
curl_setopt($ch, CURLOPT_PROXYTYPE, 7);