• ASP.NET(c#)实现中英文域名查询


    1.引言
    要实现域名查询,首先要找到域名服务器。在这用的是万网的域名服务器。
    网址为:http://panda.www.net.cn/cgi-bin/check.cgi?area_domain=
    whois:http://whois.hichina.com/cgi-bin/whois?domain=

    2.查询界面
    输入中文域名后查询界面:
    .

    判断是否为中文域名(javascript):

    function IsChDomain(domainStr)

    {

    var flag = false;

    var compStr = "ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_0123456789";

    var domainLength = domainStr.length;

    for(var i = 0;i < domainLength;i++)

    {

    var temp = domainStr.charCodeAt(i);

    if(temp >= 10000)//含有字符编码大于10000的字符判断为中文,不太严格

    {

    flag
    =true;

    }

    else

    {

    var temp2 = compStr.indexOf(domainStr.charAt(i));

    if(temp2 == -1)

    {

    flag
    = false;

    break;

    }

    }

    }

    return flag;

    }


    输入英文域名后查询界面:
    .
    判断是否为英文域名:

    function IsEnDomain(domainStr)

    {

    var flag = false;

    var compStr = "ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_0123456789";

    var domainLength = domainStr.length;

    for(var i = 0;i<domainLength;i++)

    {

    if(compStr.indexOf(domainStr.charAt(i)) == -1)

    {

    flag
    = false;

    break;

    }

    else

    {

    flag
    = true;

    }

    }

    return flag;

    }


    中国等不能注册英文域名,把相应的CheckBox的disabled属性设置为true,代码为(javascript):

    function Trim(domainStr)

    {

    return domainStr.replace(/(^s*)|(s*$)/g, "");

    }



    function checkValue()

    {

    if(document.getElementById("txtDomainName").value=='')

    {

    alert(
    '请输入域名!');

    return false;

    }



    if(document.getElementById("txtDomainName").value.length >= 60)

    {

    alert(
    '域名长度不能超过60个字符!');

    return false;

    }



    for(var i = 0;i < document.getElementById("txtDomainName").value.length;i++)

    {

    if(document.getElementById("txtDomainName").value.charAt(i) == ' ')

    {

    alert(
    '域名中不能含有空格!');

    return false;

    break;

    }

    }

    checkDomainType();

    return true;

    }



    function checkDomainType()

    {

    var domainName = document.getElementById("txtDomainName").value;

    domainName
    = Trim(domainName);

    if(IsChDomain(domainName))

    {

    setCheckBox(
    true);

    }

    else if(IsEnDomain(domainName))

    {

    setCheckBox(
    false);

    }

    }



    function setCheckBox(flag)

    {

    document.getElementById(
    "chkorg").disabled = flag;

    document.getElementById(
    "chkorgcn").disabled = flag;

    document.getElementById(
    "chkcomcn").disabled = flag;

    document.getElementById(
    "chknetcn").disabled = flag;

    document.getElementById(
    "chkgovcn").disabled = flag;

    document.getElementById(
    "chkmobi").disabled = flag;

    document.getElementById(
    "chkinfo").disabled = flag;

    document.getElementById(
    "chkcn").disabled = flag;

    document.getElementById(
    "chkchina").disabled = !flag;

    document.getElementById(
    "chkcompany").disabled = !flag;

    document.getElementById(
    "chknetwork").disabled = !flag;

    }


    查询结果界面:
    .

    3.后台编码
    例如查询域名:zxjay.net
    网址为:
    http://panda.www.net.cn/cgi-bin/check.cgi?area_domain=zxjay.net
    返回的信息为XML格式:

    <?xml version="1.0" encoding="gb2312"?>

    <property>

    <returncode>200</returncode>

    <key>zxjay.net</key>

    <original>210 : Domain name is available</original>

    </property>

    其中200表示正确返回
    210 表示可以注册
    因此可通过判断original 后的代码是否为210判断域名是否可以注册。
    判断方法有多种:处理字符串、解析XML等
    在这用的是解析XML方法。
    获取待查询的域名:

    string domainName = Common.ClearString(txtDomainName.Text, 60);//清理字符串,判断域名是否合法



    if (domainName == string.Empty)

    {

    lblMsg.Text
    = Common.ShowMessage("请输入域名!");

    return;

    }



    IList
    <string> domainList = new List<string>();//保存域名名称和后缀

    domainList.Add(domainName);//List<string>第一元素保存域名名称,其他元素为域名后缀



    if (chkcom.Checked) domainList.Add(chkcom.Text);

    if (chknet.Checked) domainList.Add(chknet.Text);

    if (chkbiz.Checked) domainList.Add(chkbiz.Text);

    if (chkcc.Checked) domainList.Add(chkcc.Text);

    if (chktv.Checked) domainList.Add(chktv.Text);





    if (Utility.IsHasCHZN(domainName))

    {

    if (chkchina.Checked) domainList.Add(chkchina.Text);

    if (chkcompany.Checked) domainList.Add(chkcompany.Text);

    if (chknetwork.Checked) domainList.Add(chknetwork.Text);

    if (chkcn.Checked) domainList.Add(chkcn.Text);

    }

    else

    {

    if (chkorg.Checked) domainList.Add(chkorg.Text);

    if (chkorgcn.Checked) domainList.Add(chkorgcn.Text);

    if (chkcomcn.Checked) domainList.Add(chkcomcn.Text);

    if (chknetcn.Checked) domainList.Add(chknetcn.Text);

    if (chkgovcn.Checked) domainList.Add(chkgovcn.Text);

    if (chkmobi.Checked) domainList.Add(chkmobi.Text);

    if (chkinfo.Checked) domainList.Add(chkinfo.Text);

    }



    Session[
    "domainName"] = domainList;

    Response.Redirect(
    "ShowDomainName.aspx");//在 ShowDomainName.aspx 中判断处理待查询的域名


    判断是否为中文域名(方法):

    public static bool IsHasCHZN(string domainName)

    {

    Regex RegCHZN
    = new Regex("[一-龥]");

    Match m
    = RegCHZN.Match(domainName);

    return m.Success;

    }


    判断域名是否被注册(方法):

    /// ** asp.net(C#) 实现域名查询**

    ///

    /// File: CommonOperate.cs

    ///

    /// Author: 周振兴 (Zxjay 飘遥)

    ///

    /// E-Mail: tda7264@163.com

    ///

    /// Date: 07-07-07

    ///

    /// Blog:http://xianfen.net

    public static bool IsReg(string domainName)

    {

    bool flag = false;

    string dm = HttpContext.Current.Server.UrlEncode(domainName);

    try

    {

    //判断方法非常多,如打开远程文件再处理字符串等等,这里用的方法效率不是很高

    WebClient wc = new WebClient();

    string xmlstr = wc.DownloadString("http://panda.www.net.cn/cgi-bin/check.cgi?
    area_domain=
    " + dm);

    StringReader sr
    = new StringReader(xmlstr);

    XmlTextReader xr
    = new XmlTextReader(sr);



    while (xr.Read())

    {

    if (xr.IsStartElement("original"))

    {

    xr.Read();

    if (xr.Value.Substring(0, 3) == "210")

    {

    flag
    = true;

    break;

    }

    else

    {

    flag
    = false;

    break;

    }

    }

    }



    return flag;

    }

    catch

    {

    return false;

    }

    }


    显示域名查询情况:

    if (Session["domainName"] != null)

    {

    IList
    <string> il = (IList<string>)Session["domainName"];

    if (il.Count > 1)

    {

    string dm = il[0];

    string dname;

    Label lbl;

    for (int i = 1; i < il.Count; i++)

    {

    dname
    = dm + il[i];

    if (Utility.IsReg(dname))

    {

    lbl
    = new Label();

    lbl.ID
    = "lbl" + i.ToString();

    lbl.Text
    = string.Format("<div style='padding:5px; 200px;
    float:left;clear:left;'>{0}</div>
    " +

    "<div style='text-align:center;padding:5px;200px;float:left;
    color:#ff0000;'>可以注册!</div>
    ", dm + il[i]);

    pnlDomainName.Controls.Add(lbl);

    }

    else

    {

    lbl
    = new Label();

    lbl.ID
    = "lbl" + i.ToString();

    lbl.Text
    = string.Format("<div style='padding:5px; 200px;
    float:left; clear:left;'><a target='_blank' href='http://www.{0}'>{1}</a></div>
    " +

    "<div style='text-align:center;float:left;padding:5px; 200px;'>已被注册!
    </div>
    " +

    "<div style='float:left;padding:5px;'><a target='_blank' href='
    http://whois.hichina.com/cgi-bin/whois?domain={2}'>查看</a></div>
    ",

    dm
    + il[i], dm + il[i], Server.UrlEncode(dm + il[i]));

    pnlDomainName.Controls.Add(lbl);

    }

    }

    }

    }


    4.注意事项
    (1) 编码格式必须是GB2312
    (2) 域名格式判断并不太严格
    (3) 参考了万网等的一些信息

  • 相关阅读:
    android 生命周期图
    c++中 箭头> 双冒号:: 点号.操作符区别
    Blocks 笔记
    使用AVAudioRecorder 录音
    音频输入大小变化图
    【Linux】本机与服务器文件互传、Linux服务器文件上传下载
    【Oracle】Oracle解锁、Oracle锁表处理
    使用three.js创建3D机房模型分享一
    WPF下递归生成树形数据绑定到TreeView上
    (转载)C++抽象工厂模式(大话设计模式)
  • 原文地址:https://www.cnblogs.com/top5/p/1585271.html
Copyright © 2020-2023  润新知