Задание:
Есть
html-документ:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Веб-интерфейс к whois-сервису с использованием jQuery</title>
<link rel="stylesheet" href="styles.css">
<script src="/js/jquery-3.6.0.min.js"></script>
<script src="scripts.js"></script>
</head>
<body>
<h1>Whois–сервис</h3>
<div></div>
<input type="text" placeholder="Домен в зоне .RU">
<button>Отправить запрос</button>
</body>
</html>
и стилевая разметка:
h1 { margin: 0px 0px 16px 0px; font-family: Arial, Tahoma, Verdana; }
div { border: 1px solid #e0e0e0; width: 100%; min-height: 160px; margin-bottom: 26px; padding: 10px; font-family: Arial, Tahoma, Verdana; font-size: 16px; }
input[type=text] { display: block; float: left; width: 200px; height: 30px; box-sizing: border-box; border: 1px solid #e0e0e0; font-family: Arial, Tahoma, Verdana; font-size: 16px; outline: 0; color: #404040; padding: 4px; margin-right: 10px; }
input[type=text]::placeholder { color: #d0d0d0; font-size: 14px; }
input[type=text]:focus::placeholder { opacity: 0; }
button { display: block; width: 150px; height: 30px; border: 1px solid #d0d0d0; background-color: #f0f0f0; color: #000000; outline: none; }
Используя
JavaScript-библиотеку jQuery, необходимо написать скрипт (scripts.js), проверяющий соответствие указанного доменного имени правилам записи доменных имен в зоне .RU, отправляющий асинхронный
AJAX-запрос методом GET серверному скрипту (scripts.php) и выводящий полученный от сервера ответ. Серверный скрипт (scripts.php) должен отправлять запрос об указанном домене
на whois-сервер whois.tcinet.ru, обслуживающий доменную зону .RU, получать ответ и возвращать его клиентскому скрипту (scripts.js). Для соединения серверного скрипта
с whois-сервером можно использовать функцию
fsockopen, информацию о которой и примеры использования можно посмотреть
здесь.
JS-скрипты (scripts.js):
$(window).on('load', function()
{
$('button').click(function() { checkDomainName(); });
$('input').keydown(function(e) { if(e.keyCode == 13) checkDomainName(); });
});
function checkDomainName()
{
if(!$('input').val())
{
alert('Укажите доменное имя!');
return;
}
if(/^[a-zA-Z0-9]([a-zA-Z0-9]|\-(?!\-)){0,61}[a-zA-Z0-9]\.ru$/i.test($('input').val()))
{
$.get('scripts.php', { domain : $('input').val() }, function(data) { $('div').html(data); });
return;
}
else
{
alert('Некорректное имя домена');
}
}
PHP-скрипты (scripts.php):
<?
header('Content-Type: text/plain; charset=utf-8');
$whoisServer = 'whois.tcinet.ru';
$whoisSocket = fsockopen($whoisServer, 43);
if($whoisSocket)
{
fputs($whoisSocket, $_GET['domain'].PHP_EOL);
$answerText = '';
while(!feof($whoisSocket))
{
$currentText = fgets($whoisSocket, 128);
if(!preg_match('/^(\%|\n|L)/', $currentText)) $answerText .= $currentText.'<br>';
}
fclose($whoisSocket);
if(preg_match('/^No entries found/', $answerText)) $answerText = 'Информация по домену <b>'.$_GET['domain'].'</b> не найдена';
echo $answerText;
}
?>
Результат:
Результат выполнения задания можно посмотреть
здесь.