Возникли проблемы с проверкой, существует ли URL PHP

0

Я прочитал много вопросов относительно названия. В основном я использую комбинацию getheader и curl, чтобы проверить, существует ли url.

$url = "http://www.asdkkk.com";
$headers = get_headers($url);  

if(strpos($headers[0],'404') === false){

    $ch = curl_init($url); 
    curl_setopt_array($ch,array(
                            CURLOPT_HEADER => true,
                            CURLOPT_RETURNTRANSFER => true,
                            CURLOPT_FOLLOWLOCATION => true,
                            CURLOPT_SSL_VERIFYPEER => false,
                            CURLOPT_HTTPHEADER     => array("Accept-Language: en-US;q=0.6,en;q=0.4"),
                            CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.6 (KHTML, like Gecko) Chrome/16.0.897.0 Safari/535.6'  
                           ));
    $data = curl_exec($ch); 
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    if($httpCode != 404){
        curl_close($ch); 
        return $data;
    }
}else{
  echo "URL Not Exists";
}

Обе функции возвращают код состояния 200 для URL-адреса (" http://www.asdkkk.com "). В URL-адресе находится сайт, который не найден. Но похоже, что он размещен, а заголовок страницы не установлен на 404. Я пробовал не только этот URL-адрес, но и другие. Итак, как я могу определить URL-адрес, на самом деле существует очень точный способ?

  • 0
    Возможный дубликат Как я могу проверить, существует ли URL через PHP?
  • 0
    Я не читал этот вопрос раньше. @castis
Показать ещё 5 комментариев
Теги:
curl

1 ответ

1

Я думаю, что проблема с вашим примером кода заключается в том, что вы путаете код ответа 404 HTTP для "Not Found" с сервера с примером URL-адреса, который вообще не указывает на какой-либо сервер. Если ответа сервера вообще нет, cURL вернет "0" в качестве ответа HTTP, а не 404. Попробуйте выполнить приведенный ниже код и посмотреть, работает ли он для ваших целей:

$urls = array(
    "http://www.asdkkk.com",
    "http://www.google.com/cantfindthisurl",
    "http://www.google.com",
);
$ch = curl_init();
foreach($urls as $url){
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_exec($ch);
    $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    echo "$http_status for $url <br>";
}
  • 0
    Пожалуйста, обратите внимание на параметр CURLOPT_SSL_VERIFYPEER, который также проверяет, что URL начинается с HTTPS, поэтому curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню