Парсим данные с использованием proxy

Парсим данные с использованием proxy

563
12.07.2017

Для получения информации с других ресурсов в сети есть много разных вариантов. В данной статье рассмотрим вариант получения данных через анонимный прокси-сервер

В предыдущей статье я рассматривал процесс получения данных от стороннего сайта с использованием php-функции file_get_contents(). В данной статье рассмотрим более функциональный способ - с использованием curl и прокси-сервера.

Для начала необходимо найти прокси, через который будет работать данный процесс. В сети есть куча вариантов того, как можно установить свой прокси-сервер на VPS (например, используя 3proxy), либо можно арендовать proxy в любой точке земного шара и настроить работу через него. Я пошел проще - <a href="/wiki/linux/2285-install-tor-on-centos/">установил на VPS-ку с сайтом tor</a> и настроил работу через него. В итоге, функция получения данных от стороннего сервера приобрела вид:

function GetCurlData($url)
{
	if(strpos($url,'http://')!==false || strpos($url,'https://')!==false){
		$altUrl = '/' . str_replace('/', '_', substr(array_pop(explode('://',$url)), 1));
	} else {
		$altUrl = '/' . str_replace('/', '_', substr($url, 1));
	}

	$altUrl = str_replace('//','/',$altUrl);

	if (file_exists($this->uploadFolder . $url))
	{
		return file_get_contents($this->uploadFolder . $url);
	} elseif (file_exists($this->uploadFolder . $altUrl))
	{
		return file_get_contents($this->uploadFolder . $altUrl);
	} else
	{
		if(strpos($url,'http://') !== false || strpos($url,'https://')!==false){

		} else {
			$url = $this->domain.$url;
		}

		$code = $this->getCurlCode($url);

		if($code==200){
			$ch = curl_init();
			curl_setopt($ch, CURLOPT_URL, $url);
			curl_setopt($ch, CURLOPT_PROXY, '127.0.0.1:9050');
			curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);

			curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
			curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);

			$linkData = curl_exec($ch);

			if(!curl_errno($ch)){
				if (strlen($linkData) > 0)
				{
					file_put_contents($this->uploadFolder . $altUrl, $linkData);
					curl_close($ch);
					return $linkData;
				} else
				{
					curl_close($ch);
					return false;
				}

			} else {
				echo 'Ошибка curl: ' . curl_error($ch);
			}

			curl_close($ch);

		} else {
			echo $url . 'returns code' . $code;
		}
	}
}

Функция получения кода ответа от сервера имеет вид:

function getCurlCode($url){
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_PROXY, '127.0.0.1:9050');
	curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
	curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
	curl_setopt($ch, CURLOPT_HEADER, 1);
	$result = curl_exec($ch);
	$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

	return $code;
}


Благодарю за внимание! Делитесь вашими замечаниями в комментариях ниже.


P.S. Обращайтесь ко мне за приобретением лицензий и продлений на 1C-Битрикс "Управление сайтом", лицензий на облачную и коробочную версии Битрикс 24 а также за приобретением и внедрением готовых решений на базе 1С-Битрикс от партнеров. За более подробной информацией свяжитесь со мной любым удобным для вас способом


Комментарии

Еще никто не комментировал данную публикацию. Будьте первыми!

Добавить комментарий

captcha

Возврат к списку