В этой статье хотел бы поговорить как можно получить подробную информацию о домене. В сети Интернет полно таких сервисов, которые предоставляют эту информацию, конечно можно составить запрос, отправить его на сервер, получить ответ, обработать его (отпарсить, если потребуется) и вывести готовый результат, но зачем, если имеется в Delphi отличный компонент, который поможет это сделать, конечно не совсем все в нем удобно. Для того, чтобы использовать стабильно данный компонент необходимо знать адрес сервера проверки домена, а также его порт. По умолчанию адрес сервера следующий — whois.internic.net, а порт 43. Тут также стоит отметить, что данный сервер может получать информацию о доменах .com, .net, .org. Если Вам необходимо, например, получить информацию о российском домене, то придется искать сервер для российских доменов. Давайте разместим на нашей форме наконец-то данный компонент, который находится на вкладке Indy Clients, и у меня он последний в списке.
Итак у меня на форме следующие компоненты
- TidWhois
- TButton
- TMemo
У компонента ТidWhois есть отличная функция Whois, которая получает на сервере всю информацию о домене. В TMemo у нас будет отображаться вся информация о домене на английском языке. Опять повторюсь, чтобы было все на русском и работали российские домены необходимо найти российский сервер. Также если получать информацию о домене и сразу ее отображать в TMemo вот так
Memo1.Text:=IdWhois1.WhoIs('twitter.com');
то получиться не сильно красиво, будут видны символы переноса каретки на новую строку, конечно это будет выглядеть не очень красиво, поэтому необходимо от них избавиться, можно написать свой парсинг, чтобы избавиться от символа #10 - перенос каретки на новую строку. Поэтому я написал вот такой вот примерно парсинг
procedure TForm1.Button2Click(Sender: TObject);
var
i:integer;
Texts,line:WideString;
begin
Texts:=IdWhois1.WhoIs('twitter.com');
i:=1;
while (i<=length(Texts)) do
begin
if Texts[1]=#10 then
Delete(Texts,1,1);
if pos(#10,Texts)<>0 then
begin
line:=copy(Texts,1,pos(#10,Texts));
Delete(line,pos(#10,line),length(line));
Memo1.Lines.Add(line);
Delete(Texts,1,pos(#10,Texts));
i:=0;
end;
inc(i);
end;
Memo1.Lines.Add(Texts);
end;
Можете конечно свой парсинг написать, но это для тех кто не ищет легких путей, так как чтобы в TMemo получить информацию о домене в отформатированном варианте и с переносом всех строк на новые строки, можно написать вот такой вот код
procedure TForm1.Button3Click(Sender: TObject);
begin
Memo1.Lines.Text:=IdWhois1.WhoIs('twitter.com');
end;
Вот так вот можно получить информацию о домене.