Как добавить условия проверки на “битые ссылки” с использованием cURL?

171
19 декабря 2017, 19:14

Добрый день! Подскажите пожалуйста, поставил плагин проверки "битых ссылок", но необходимо его расширить, добавить пару url-адресов для проверки на доступность, но проблема заключается в том, что первый адрес (http://example.ru - электронная библиотека) возвращает код '200' при доступности книги, а также если ее чтение недоступно, т.е. страница эл.библиотеки открывается, но пишется текст "чтение книги недоступно". (также и с http://example2.ru ) Соответственно, если страница доступна, но присутствует запись о "недоступности книги", то ссылка считается битой. Необходимо написать еще одну функцию? Дописать условия проверки, изменить на множественный обработчик curl_multi_init(); или создать несколько cURL ресурсов ($s1 = curl_init(); и $s2 = curl_init();) Подскажите пожалуйста в каком направлении двигаться, с cURL'ом только знакомлюсь, буду очень признателен за помощь.

public function scrape($url) {
    global $CFG;
    $cookiefilelocation = $CFG->dataroot . '/tool_crawler_cookies.txt';
    $s = curl_init();
    curl_setopt($s, CURLOPT_URL,             $url);
    curl_setopt($s, CURLOPT_TIMEOUT,         self::get_config()->maxtime);
    if ( $this->should_be_authenticated($url) ) {
        curl_setopt($s, CURLOPT_USERPWD,         self::get_config()->botusername.':'.self::get_config()->botpassword);
    }
    curl_setopt($s, CURLOPT_USERAGENT,
        self::get_config()->useragent . '/' . self::get_config()->version . ' ('.$CFG->wwwroot.')' );
    curl_setopt($s, CURLOPT_MAXREDIRS,       5);
    curl_setopt($s, CURLOPT_RETURNTRANSFER,  true);
    curl_setopt($s, CURLOPT_FOLLOWLOCATION,  true);
    curl_setopt($s, CURLOPT_FRESH_CONNECT,   true);
    curl_setopt($s, CURLOPT_HEADER,          true);
    curl_setopt($s, CURLOPT_COOKIEJAR,       $cookiefilelocation);
    curl_setopt($s, CURLOPT_COOKIEFILE,      $cookiefilelocation);
    curl_setopt($s, CURLOPT_SSL_VERIFYHOST,  0);
    curl_setopt($s, CURLOPT_SSL_VERIFYPEER,  0);
    $result = (object) array();
    $result->url              = $url;
    $raw   = curl_exec($s);
    if (empty($raw)) {
        $result->url              = $url;
        $result->httpmsg          = 'Curl Error: ' . curl_errno($s);
        $result->title            = curl_error($s);
        $result->contents         = '';
        $result->httpcode         = '500';
        $result->filesize         = curl_getinfo($s, CURLINFO_SIZE_DOWNLOAD);
        $mimetype                 = curl_getinfo($s, CURLINFO_CONTENT_TYPE);
        $mimetype                 = preg_replace('/;.*/', '', $mimetype);
        $result->mimetype         = $mimetype;
        $result->lastcrawled      = time();
        $result->downloadduration = curl_getinfo($s, CURLINFO_TOTAL_TIME);
        $final                    = curl_getinfo($s, CURLINFO_EFFECTIVE_URL);
        if ($final != $url) {
            $result->redirect = $final;
            $mdlw = strlen($CFG->wwwroot);
            if (substr ($final, 0, $mdlw) !== $CFG->wwwroot) {
                $result->external = 1;
            }
        } else {
            $result->redirect = '';
        }
        curl_close($s);
        return $result;
    }
READ ALSO
Найти и заменить с условием

Найти и заменить с условием

WP Данные из текстового поля попадают в переменную the_contentНужна функция, которая будет пробегаться по тексту, выискивать таблицы, не заключенные...

170
React + Laravel скачивание файлов

React + Laravel скачивание файлов

Есть АПИ на Laravel, я использую библиотеку Laravel-Excel что бы сгенерировать xls файл, как его правильно отдать клиенту и как сделать на реакте скачивание...

152
Имитация нажатия кнопки PHP/JS

Имитация нажатия кнопки PHP/JS

Мне нужен скрипт на PHP или JavaScript, который будет на стороннем сайте вводить в текстовое поле текст, а потом нажимать несколько кнопокID кнопок...

151