V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
pytth
V2EX  ›  分享创造

[全新官方接口] PHP 检测微信域名拦截,检测微信域名被封

  •  2
     
  •   pytth · 2020-12-31 10:26:41 +08:00 · 3709 次点击
    这是一个创建于 1448 天前的主题,其中的信息可能已经有所发展或是发生改变。

    你的域名在微信被拦截的 3 种常见情况

    1 、域名因违规或有风险被拦截(红色拦截)
    2 、类似 taobao.comdouyin.com 这种的恶意竞争式拦截,淘宝、抖音等微信的竞争对手一般都是白色拦截(白色拦截)
    3 、有一个中间页的拦截,需要多次点击按钮才可以跳转到你的域名的,多是一些新型域名后缀,例如.top .xyz .link 后缀,这种情况,备案后可以解决(备案拦截)


    通过 php get_headers()函数就可以分析到结果
    这个下标为 6 是一个 URL,在微信访问后正是这个讨厌的页面!


    如果切换为正常的链接的话,返回的 headers 是这样的


    之前发过一次,但是之前的已经不能用了
    现在又重新抓包,终于发现了,原来之前的接口
    修改了数据返回的位置,之前是返回下标为[1]的
    现在返回的位置下标是[6]既然这样
    那么代码就好写了~下面是代码,再也不用网上收费的 api 了


    Api 调用源码

    <?php
    // 返回 JSON
    header('Content-type: application/json;charset=utf-8');
     
    // 官方 API 接口
    $api = get_headers('http://mp.weixinbridge.com/mp/wapredirect?url='.$_GET['url']);
    // 检测 url 的合法性
    $checkUrl = "/http[s]?:\/\/[\w.]+[\w\/]*[\w.]*\??[\w=&\+\%]*/is";
    
    // 过滤 URL
    switch($_GET['url'])
    {
        case (preg_match($checkUrl,$_GET['url'])):
        $result = array(
            'code' => 201,
            'msg' => '你传入的 URL 不合法'
         );
        break;
    
        case ($api[6] !== 'Location: '.$_GET['url'].''):
        $result = array(
            'code' => 202,
            'msg' => '域名被拦截'
         );
        break;
    
        case ($api[6] == 'Location: '.$_GET['url'].''):
        $result = array(
            'code' => 200,
            'msg' => '域名正常'
         );
        break;
    }
     
    // 输出 JSON
    echo json_encode($result,JSON_UNESCAPED_UNICODE);
    ?>
    

    如何使用?

    1 、新建 wxcheck.php 文件
    2 、拷贝上面代码
    3 、部署到服务器即可
    4 、发起 Get 请求,URL 格式如下

    http://域名 /目录 /wxcheck.php?url=你要检测的域名
    

    成品

    https://github.com/likeyun/WxCheck

    15 条回复    2021-01-07 11:01:45 +08:00
    aijialefu
        1
    aijialefu  
       2020-12-31 15:16:22 +08:00
    老大,你是用手机访问,然后抓的包吗?
    pytth
        2
    pytth  
    OP
       2020-12-31 16:09:06 +08:00
    @aijialefu 用浏览器
    aijialefu
        3
    aijialefu  
       2020-12-31 22:54:14 +08:00
    @pytth 老大 我是小菜,跨年夜研究了一下,发现能复现你的过程,非常不错哦!感谢...之前研究过一次,走了不少弯路。
    Mitt
        4
    Mitt  
       2021-01-01 20:22:34 +08:00
    备案拦截那个,其实是因为 http,如果是 https 就不拦了
    hao888
        5
    hao888  
       2021-01-02 14:57:53 +08:00 via Android
    谢谢老哥,马上部署使用下
    pytth
        6
    pytth  
    OP
       2021-01-04 10:12:43 +08:00
    @Mitt 这样吗?我去试试先
    Kinnice
        7
    Kinnice  
       2021-01-04 10:31:42 +08:00
    直接检测返回的 Location,不必要一直纠结于下标,下标可能会经常改变。
    unicloud
        8
    unicloud  
       2021-01-04 12:01:59 +08:00
    厉害哦! 666
    dorothyREN
        9
    dorothyREN  
       2021-01-04 16:39:02 +08:00
    我用 python 搞了一个,也是参考你这个的
    soseek
        10
    soseek  
       2021-01-04 17:45:36 +08:00
    我发现似乎有些域名在微信里可以打开,用这个却返回被封了
    pytth
        11
    pytth  
    OP
       2021-01-04 18:00:13 +08:00
    @soseek Github 里面有说为什么会这样,有些东西没有开启
    haython
        12
    haython  
       2021-01-04 18:32:47 +08:00
    dorothyREN
        13
    dorothyREN  
       2021-01-04 18:54:39 +08:00
    Location 那个 url 里面 main_type=2 是被 ban 了,main_type=5 是提示浏览器访问
    soseek
        14
    soseek  
       2021-01-06 14:45:17 +08:00
    是这样判断,有些域名也是会误报的,不是说全部
    summer2019
        15
    summer2019  
       2021-01-07 11:01:45 +08:00
    干,试了才发现老子博客被拦了。ctm 的腾讯
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3727 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:30 · PVG 18:30 · LAX 02:30 · JFK 05:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.