Как найти домен HTTP или HTTPS (с WWW или без) с использованием PHP?

я имею миллиона (1000000) домены список.

+----+--------------+--------------------------+
| Id | Domain_Name  |       Correct_URL        |
+----+--------------+--------------------------+
|  1 | example1.com | http://www.example1.com  |
|  2 | example2.com | https://exmple2.com      |
|  3 | example3.com | https://www.example3.com |
|  3 | example4.com | http://example4.com      |
+----+--------------+--------------------------+
  • ID а также Domain_Name колонка заполнена.
  • Correct_URL столбец пуст.

Вопрос : Мне нужно заполнить Correct_URL колонка.

Проблема, с которой я сталкиваюсь, заключается в том, как найти префиксную часть перед доменом. Это может либо http:// или же http://www. или же https:// или же https://www.

Как мне найти то, что сверху 4, используя PHP? Обратите внимание, что мне нужно запустить код для всех 1 000 000 доменов …. Поэтому я ищу самый быстрый способ проверить это …

-1

Решение

Вы могли бы использовать cURL метод:

$url_list = ['facebook.com','google.com'];

foreach($url_list as $url){

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
curl_exec($ch);

$real_url =  curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
echo $real_url;//add here your db commands

}

Это займет несколько раз, потому что это последний переадресованный URL. если вы только хотите проверить, является ли его http или же https Вы можете попробовать это:

$url_list = ['facebook.com','google.com'];

foreach($url_list as $url){

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_exec($ch);

$real_url =  curl_getinfo($ch, CURLINFO_REDIRECT_URL);
echo $real_url;//add here your db commands

}
1

Другие решения

На самом деле нет другого способа, кроме как сделать HTTP-запрос на каждую из возможностей и посмотреть, получите ли вы ответ.

Пока ты утверждаешь «Это может быть либо http: //, либо HTTP: // WWW. или https: // или https: // WWW, реальные домены могут предоставлять ноль, некоторые или все или те (а также различные другие), и они могут отвечать на запросы OK или перенаправлениями или ошибками аутентификации и т. д.

HTTP и HTTPS не являются атрибутами веб-приложения; это протоколы связи, обрабатываемые конечной точкой (веб-сервером или брандмауэром приложения и т. д.).

Как и при любом сетевом обмене данными, необходимо проверить хост (в данном случае «www» — хост) и порт (не обязательно, но чаще всего) порта 80 и 443 соответственно. Это исследование — крик, затем вы ждете и посмотрите, есть ли служба, которая слушает с другой стороны.

6

По известному URL вы можете позвонить в версии http и / или https с помощью get_headersИз их можно определить, доступен ли https, перенаправляет ли http на https и так далее.

Подробности можно найти здесь: http://php.net/manual/en/function.get-headers.php

2

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

В конце концов, вам нужно установить порядок приоритетов, рекомендуемый порядок — HTTPS над HTTP и WWW без, так что вы получите список приоритетов, например:

Как и все остальные, вам необходимо проверить их с помощью cURL.

foreach($domainRows as $domainRow){
$scheme_list = ['https://www.','https://', 'http://www.', 'http://'];
$bestUrl = false;
foreach($scheme_list as $scheme){

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $scheme.$domainRow['Domain_Name']);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
curl_exec($ch);

$real_url =  curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
if($real_url){
$bestUrl = $scheme.$domainRow['Domain_Name']
break;
}
}


if($bestUrl){
// you have the best URL to use as $bestUrl save it to your DB Row
}else{
// the site is not responding to any URL's do you need to do something here?
}

}

Или, основываясь на ответе Александра Холмана, о котором я полностью забыл get_headers ты можешь сделать

foreach($domainRows as $domainRow){
$scheme_list = ['https://www.','https://', 'http://www.', 'http://'];
$bestUrl = false;
foreach($scheme_list as $scheme){

$res = get_headers($scheme.$domainRow['Domain_Name']);
// if you want to allow redirects remove/alter this part as it blocks them.
if($res && isset($res[0])){
$statusParts = explode(" ", $res[0]);
if($statusParts[1] == "200"){
$bestUrl = $scheme.$domainRow['Domain_Name'];
break;
}
}
//end of status check
//replace with below to allow all responses from server including 404
/*if($res){
$bestUrl = $scheme.$domainRow['Domain_Name'];
break;
}*/
}


if($bestUrl){
// you have the best URL to use as $bestUrl save it to your DB Row
}else{
// the site is not responding to any URL's do you need to do something here?
}

}

Этот код будет проверяться в порядке приоритета, и первый соответствующий ему код прекратит тестирование для других, и если он не найдет работающую систему, он сообщит вам об этом.

Благодаря Supun Praneeth, как я взял и дополнил там код, чтобы лучше соответствовать вашим потребностям.

2
По вопросам рекламы [email protected]