Отвечая на изначальный вопрос — легко. И тысячи способов от Web Application Firewall до встроеггого в NginX lua-модуля.
Отвечая на раскрытый в комментариях вопрос:
function getContent($url, $referer = null, $proxies = array(null))
{
$proxies = (array) $proxies;
$steps = count($proxies);
$step = 0;
$try = true;
while($try){
// create curl resource
$ch = curl_init();
$proxy = isset($proxies[$step]) ? $proxies[$step] : null;
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_REFERER, $referer);
curl_setopt($ch, CURLOPT_USERAGENT, "Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.9.168 Version/11.51");
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //return the transfer as a string
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$output = curl_exec($ch); // get content
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); // Получаем HTTP-код
// close curl resource to free up system resources
curl_close($ch);
$step++;
$try = (($step < $steps) && ($http_code != 200));
}
return $output;
}
// оффтоп: вообще, у меня есть готовый парсер на Lua, который и User-Agent и прокси на каждый запрос меняет (и сразу парсинг html в массив с данными приделан для вытаскивания нужных элементов в цикле), и сохранение из этого csv... Но, как очевидно, его (парсер) нужно под вёрстку каждого сайт затачивать :)
P.S., а ещё вы промахнулись в тегах. Конечный ваш вопрос ведь о PHP, а не NginX. Разве нет? :)