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

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

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

Для начала необходимо найти прокси, через который будет работать данный процесс. В сети есть куча вариантов того, как можно установить свой прокси-сервер на VPS (например, используя 3proxy), либо можно арендовать proxy в любой точке земного шара и настроить работу через него. Я пошел проще - установил на VPS-ку с сайтом tor и настроил работу через него. В итоге, функция получения данных от стороннего сервера приобрела вид:

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;
}
Количество показов: 2136
12.07.2017

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

Если вам была полезна статья можете отблагодарить автора:
Ethereum:

0x16Df809287333C49D3A237296C6248A6c08702Bc

Разработка сайта

Подайте заявку на разработку сайта на базе готового решения от компании 1С-Битрикс или одного из партнеров компании. Максимально подробно опишите, чему будет посвящен сайт, если это интернет-магазин - что он будет продавать, нужна ли мультиязычность, будут ли разные типы цен (розница, опт, крупный опт), будет ли интеграция с 1С, будет ли выгрузка товаров на различные торговые площадки...

Сопровождение сайта

Вы можете подать заявку на сопровождение вашего сайта на базе 1С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение

Работы по сайту

Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.


Fatal error: Declaration of Pai\Sitemap\PaiSeoSitemap::Create($site_id, $max_execution_time, $NS, $arOptions, $modules, $iblocks, $clearIndexes) must be compatible with CAllSiteMap::Create($site_id, $max_execution_time, $NS, $arOptions = []) in /home/bitrix/www/bitrix/modules/pai.sitemap/lib/paiseositemap.php on line 183
[ErrorException] E_COMPILE_ERROR
Declaration of Pai\Sitemap\PaiSeoSitemap::Create($site_id, $max_execution_time, $NS, $arOptions, $modules, $iblocks, $clearIndexes) must be compatible with CAllSiteMap::Create($site_id, $max_execution_time, $NS, $arOptions = []) (0)
/home/bitrix/www/bitrix/modules/pai.sitemap/lib/paiseositemap.php:183
----------