Как обойти сайт, запрещающий мне скрести свои изображения с помощью PHP - PullRequest
0 голосов
/ 29 марта 2012

Я очищаю сайт, ищу JPG для загрузки.
Очистка HTML-страниц сайта работает нормально.
Но когда я пытаюсь получить JPG с CURL, copy (), fopen () и т. Д., Я получаю статус 403 запрет .

Я знаю, что это потому, что владельцы сайтов не хотят, чтобы их изображения были удалены, поэтому я понимаю, что хорошим ответом будет , просто не делайте этого, потому что они не хотят, чтобы вы .

Хорошо, но допустим, что все в порядке, и я пытаюсь обойти это, как этого достичь?

Если я получаю тот же URL-адрес в браузере, я могу прекрасно открыть изображение, дело не в том, что мой IP заблокирован или что-то в этом роде, и я тестирую скребок по одному файлу за раз, поэтому он не блокирует меня, потому что делать слишком много запросов слишком часто.

Насколько я понимаю, сайт может проверять наличие файлов cookie, которые подтверждают, что я использую браузер и просматриваю их сайт, прежде чем загрузить JPG.
Или, может быть, PHP использует некоторый пользовательский агент для запросов, которые сервер может обнаружить и отфильтровать.

В любом случае, есть идеи?

Ответы [ 3 ]

3 голосов
/ 30 марта 2012

На самом деле это было довольно просто.
Как и предполагал @Leigh, потребовалось только подделать http-реферер с параметром CURLOPT_REFERER.
Фактически для каждого запроса я просто предоставлял имя домена в качестве реферера, и это работало,

1 голос
/ 29 марта 2012

Базовый поиск изображений:

Использование плагина GD Library, обычно устанавливаемого по умолчанию на многих веб-хостах.Это что-то вроде уродливого хака, но некоторые могут найти факт, что это может быть сделано таким способом.

$remote_img = 'http://www.somwhere.com/images/image.jpg';
$img = imagecreatefromjpeg($remote_img);
$path = 'images/';
imagejpeg($img, $path);

Классическая функция захвата изображений cURL, когда вы извлекли местоположение изизображение с донорских страниц HTML.

function save_image($img,$fullpath){
$ch = curl_init ($img);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
$rawdata=curl_exec($ch);
curl_close ($ch);
if(file_exists($fullpath)){
    unlink($fullpath);
}
$fp = fopen($fullpath,'x');
fwrite($fp, $rawdata);
fclose($fp);
}

Если основная функция захвата изображений cURL дает сбой, то на сайте-доноре, вероятно, имеется какая-то форма защиты на стороне сервера для предотвращения поиска, и поэтому вы, вероятно, нарушаете условияобслуживание, продолжая дальше.Хотя редко, некоторые сайты создают изображения «на лету», используя модуль библиотеки GD, поэтому то, что может выглядеть как ссылка на изображение, на самом деле является скриптом PHP, и это может проверять такие вещи, как передаваемый файл cookie, реферер или значение сеанса.перед созданием и выводом изображения.

1 голос
/ 29 марта 2012

Вы можете просматривать страницу через браузер? Разве простой поиск по источнику страницы не найдет все изображения?

`    $findme   = '.jpg';
$pos = strpos($html, $findme);

if ($pos === false) {
    echo "The string '$findme' was not found in the string '$html'";
} else {
    echo "Images found..

   ///grab image location code

} `
...