Обычные прокси (например: 72.41.132.22:3128
) хорошо работают с cURL, однако, когда я использую SOCKS 5 прокси с именем пользователя / pass, он просто дает мне «[1» на странице.
Есть ли способ использовать SOCKY 5 прокси с cURL?
$proxy = "cagsan:jw22wdw@108.61.25.223:34792"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_PROXY, $proxy); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_HEADER, 1); $curl_scraped_page = curl_exec($ch); curl_close($ch);
Вы должны сообщить cURL, что прокси – прокси SOCKS5, иначе cURL предполагает, что это HTTP-прокси:
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
Из документов :
CURLOPT_PROXYTYPE
Либо CURLPROXY_HTTP (по умолчанию), либо CURLPROXY_SOCKS5.
поскольку cURL 7.21.7, вы можете использовать CURLOPT_PROXY
и указать протокол SOCKS:
curl_setopt($ch, CURLOPT_PROXY, 'socks5://bob:marley@localhost:12345');
Дополнительная информация в документации libcurl .
Для тех, кто хочет подключиться через имя хоста (localhost?), И он не работает с CURLPROXY_SOCKS5
, вы можете попробовать CURLPROXY_SOCKS5_HOSTNAME
.
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);
В некоторых более ранних версиях PHP вам нужно будет:
curl_setopt($ch, CURLOPT_PROXYTYPE, 7);