Как использовать прокси SOCKS 5 с cURL?

Обычные прокси (например: 72.41.132.22:3128) хорошо работают с cURL, однако, когда я использую прокси SOCKS 5 с именем пользователя/паролем, он просто дает мне «[1» на странице.

Есть ли способ использовать прокси SOCKY 5 с cURL?

$proxy = "cagsan:[email protected]: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);

person user198989    schedule 18.11.2012    source источник


Ответы (3)


Вам нужно указать cURL, что прокси-сервер является прокси-сервером SOCKS5, иначе cURL предполагает, что это прокси-сервер HTTP:

curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);

Из документов:

CURLOPT_PROXYTYPE

Либо CURLPROXY_HTTP (по умолчанию), либо CURLPROXY_SOCKS5.

person Kelvin    schedule 18.11.2012
comment
Как упоминал @Gido, вы можете пропустить этот параметр и использовать CURLOPT_PROXY с префиксом socks5://, и все готово. документы - person Spock; 01.02.2017

начиная с cURL 7.21.7, вы можете использовать CURLOPT_PROXY и указать протокол SOCKS:

curl_setopt($ch, CURLOPT_PROXY, 'socks5://bob:marley@localhost:12345');

Дополнительные сведения см. в документации по libcurl.

person GiDo    schedule 28.05.2014

Для тех, кто хочет подключиться через имя хоста (localhost?), и это не работает с CURLPROXY_SOCKS5, вы можете попробовать CURLPROXY_SOCKS5_HOSTNAME.

curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);

В некоторых более ранних версиях PHP вам нужно будет сделать:

curl_setopt($ch, CURLOPT_PROXYTYPE, 7);
person iautomation    schedule 11.09.2015
comment
curl.haxx.se/libcurl/c/CURLOPT_PROXY.html — CURLPROXY_SOCKS5_HOSTNAME указывает что разрешение имени хоста должно выполняться сервером socks. - person Slotos; 17.03.2016
comment
мои версии PHP PHP 7.0.22-0ubuntu0.16.04.1 (cli) ( NTS ) и curl_setopt($ch, CURLOPT_PROXYTYPE, 7); у меня работают, спасибо - person Frank He; 06.09.2017