我们在国内搭建网站就必须会接触到备案,ICP 备案可以说是一个网站的身份证。也是国内主机必须要求域名拥有的许可之一。

提供一个域名备案查询的 API

同样的,你作为国内的程序员、在写网页程序的某些时候可能也会需要用到备案 API。但是比较麻烦的一个问题就是,工业和信息化部并未提供有查询备案的 API。当然,没有 API 我们也有很多的办法可以做。

我们知道可以通过官方网页来查询:

http://www.miitbeian.gov.cn/icp/publish/query/icpMemoInfo_showPage.action

但是我们的程序不知道,所以我们往往需要写类似与 curl 模拟登陆之类的比较麻烦的办法。

为了解决这个问题,刚刚闲得无聊写了一个 API。

这个 API 的地址是:https://www.zntec.cn/icp-api 

使用方法

直接进行请求会返回 JSON 类型的数据,例如请求百度(在地址后面加 ?baidu.com):

{"code":"0","result":{"status":"查询成功","message":"域名已备案"},"record":{"user":"北京百度网讯科技有限公司","name":"百度","type":"企业","license":"京ICP证030173号-1","url":"www.baidu.com","time":"2016-02-25"}}

目前提供的返回值有上面这些,英语不太好、单词乱打的。

处理 JSON 数据旧很简单了,如下附上一个 PHP 调用这个 API 的例子:

<?php
$domain="baidu.com";
$api=file_get_contents("https://www.zntec.cn/icp-api?".$domain);
$result=json_decode($api,true);
header('Content-type:text/html;charset=utf-8');
// print_r($result);
echo "域名 ".$domain." 的备案号为:".$result['record']['license'];

运行的结果就是 “域名 baidu.com 的备案号为:京ICP证030173号-1”

由于程序也是偶然想写的,详细的文档也就不说了。


小结

暂时就这些功能,如果有 BUG 的话希望有人可以评论发我。

目前有27条回应
Comment
Trackback
Loading ....
  • andy 回应于2016/08/20 21:05 回复TA

    楼主您好,我按照您写的方法调用api,但是确返回错误,{"code":"2","result":{"status":"查询失败","message":"未输入域名"}},是您的api参数有修改了吗?非常希望和您交流下如何自己写icp检查的api

    • Tomas 回应于2016/08/22 11:31 回复TA

      这个小工具放弃开发了 ... 太多人输入未BA的域名,我打验证码都打的手软了

  • 极雪 回应于2016/06/17 01:59 回复TA

    我还以为是工信部给接入商的api,差评!

    • Tomas 回应于2016/06/18 18:03 回复TA

      只有 Jybb 这样的有钱人和工信部玩的起 ... 我穷逼一个

  • ZiShuo 回应于2016/05/18 00:05 回复TA

    我手上木有还有一个免费的私有API,数字准确性还是可以保证在99.5%以上。速度一般都能控制在0.几秒!

    • Tomas 回应于2016/05/27 09:27 回复TA

      可以交流一下如何识别验证码吗?

      我现在手打好麻烦啊。

      • 极雪 回应于2016/06/17 02:00 回复TA

        @Tomas: 他那种就是工信部给的api了,不需要验证码

  • liverpoolpjy 回应于2016/05/09 20:27 回复TA

    请问您是如何存储验证图片和验证码的对应关系?
    我发现getVerifyCode?n 的n和值不对应啊,一刷新就变了。

    • Tomas 回应于2016/05/09 20:30 回复TA

      手打的 ....

      查第一次没有,然后我根据 log 手打一次验证码。

      然后缓存。

      • liverpoolpjy 回应于2016/05/09 20:40 回复TA

        @Tomas: 唔。。我是想知道,您是怎么通过手打,把验证码存储起来,再下一次查询遇到相同图片的时候,知道从缓存中拿出对应的验证码。
        就是把图片和验证码通过什么id联系起来的
        因为我在访问http://www.miitbeian.gov.cn/getVerifyCode?1的时候每次刷新图片就变了....

        • Tomas 回应于2016/05/09 20:43 回复TA

          不储存验证码,仅仅只是记录一下域名和时间而已。

          然后自己根据域名和当时的验证码输入一次缓存就可以了。

          • liverpoolpjy 回应于2016/05/10 16:53 回复TA

            @Tomas: 博主您好,我昨天理解您的思路是利用一个相同的验证码,反复提交post请求,就可以实现多次查询。
            但今天我试了发现,每一次post请求后,verifyCode都会发生变化。
            那请问您的思路是把查询到的结果缓存下来么?如果查询的URL存在于缓存中,就返回结果,如果没有,就记录下来,然后手动查询?
            恳请赐教,不甚感谢~

            • Tomas 回应于2016/05/10 16:56 回复TA

              是的,我的思路就是如果没有查询记录的话就把域名记录到数据库,然后我每隔一段时间自己在 miibeian 查询了然后自己复制这些信息写入到数据库。

              这样的方法其实不太方便,我现在打算换一个办法、那就是直接去模拟提交 chinaz 的...这个样子的话就可以实现只要在 chinaz 查过我这里就有了。

              • liverpoolpjy 回应于2016/05/10 17:12 回复TA

                @Tomas: 原来是这样。我之前也想过通过第三方查,但发现他们的数据不全.....看来直接在官方实现实时查询有点困难了,我也换个思路吧。谢谢博主~

                • Tomas 回应于2016/05/10 17:15 回复TA

                  客气了,我也想知道如何自动化识别验证码。

                  目前想到的一个解决方案是腾讯的 OCR 识别,不知道靠不靠谱。

                  • bobo 回应于2016/08/09 11:27 回复TA

                    @Tomas: 嗯,,,其实可以上打码平台的,但是那样就要花点钱了

  • Zhensheng 回应于2016/04/21 13:14 回复TA

    好奇的是用了什么方案解决验证码问题。

    • Tomas 回应于2016/04/21 13:18 回复TA

      手打 。。。。。。。。。。。。。。。。。查不出来的我隔一段时间会手打一下,然后保存好。

      目前想不出什么好的办法来做这个,因为 API 的话不好返回验证码给调用 API 的人。

      • Zhensheng 回应于2016/04/21 13:21 回复TA

        @Tomas: 看新评论要Ctrl+F5,cache-control:max-age=10800的问题?

        • Tomas 回应于2016/04/21 13:23 回复TA

          不知道啊 。。。。。我在 upyun 设置了 3 小时缓存 。。。。你 ctrl+f5 就可以看到好奇怪 。。。。

  • HEX 回应于2016/04/21 00:49 回复TA

    可以可以 。有用

  • 泷涯 回应于2016/04/15 20:36 回复TA

    前排围观

  • 飛天鼠 回应于2016/04/08 12:54 回复TA

    路過膜拜沙雕狗

  • 本篇文章没有Trackback
你目前的身份是游客,请输入昵称和电邮!