@LionG

Почему не работает SOCKS5 с авторизацией в Curl PHP (по таймауту возвращает код 0)?

function request_file_get_contents_gzip_proxy($url, $proxy) {
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_TIMEOUT, 5);
		curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
		curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
		if (isset($proxy['user']) && isset($proxy['pass']) && $proxy['user']!='' && $proxy['pass']!='') {
			curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxy['user'].":".$proxy['pass']);
		}
		curl_setopt($ch, CURLOPT_PROXY, $proxy['ip']);
		curl_setopt($ch, CURLOPT_PROXYPORT, $proxy['port']);
		$result = curl_exec($ch);
		$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
		curl_close($ch);
		return ['result' => $result, 'code'=>$httpcode];
	}


Работает:
$proxy = ['ip'=>'localhost', 'port'=>9050];
print_r(request_file_get_contents_gzip_proxy('http://api.ipify.org', $proxy));


Не работает:
$proxy = ['ip'=>'111.111.111.111', 'port'=>1080];
print_r(request_file_get_contents_gzip_proxy('http://api.ipify.org', $proxy));


curl_exec возвращает 0.
Прокси приватная и точно рабочая, пробовал с доступом по логину и паролю, c доступом по ip.
Пробовал публичные, из рабочих работает только с 1 на 100. В чем причина ? Как дебажить ?
  • Вопрос задан
  • 1033 просмотра
Пригласить эксперта
Ответы на вопрос 1
@LionG Автор вопроса
Заработало.
function request_file_get_contents_gzip_proxy($url, $proxy) {
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)');
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch, CURLOPT_TIMEOUT, 8);
		curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 8);
		curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
		curl_setopt($ch, CURLOPT_PROXY, $proxy['ip'].':'.$proxy['port']);
		if (isset($proxy['user']) && isset($proxy['pass']) && $proxy['user']!='' && $proxy['pass']!='') {
			curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxy['user'].":".$proxy['pass']);
		}
		$result = curl_exec($ch);
		$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
		curl_close($ch);
		return ['result' => $result, 'code'=>$httpcode];
	}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы