巴拉巴拉
小魔仙

微信公众号头像链接判断是否有效

微信公众号开发,会拉取用户资料,其中有一个用户的头像链接,一旦当用户更换头像这个链接便会失效。

如果前期存储了这个链接,但是当用户更换头像,我们又没有重新获取用户资料来更新数据,则会显示失效图片:

利用chrome的开发者工具Network进行请求包对比无法查看和可以正常查看的头像链接。

失效:

正常:

对比请求后可以发现,最主要的差别就是输出请求头X-*部分。

其中失败的头像里面会有一个X-ErrNo请求头数据。

如此,我通过模拟请求,得到返回数据中的请求头数据中拥有X-ErrNo请求头,则表示这个头像是失效的。

/**
 * 检测微信头像是否可用
 * @param url
 * @return
 */
public static boolean checkWeChatHeadImg(String url) throws Exception{
    HttpURLConnection http = null;
    try {
        URL urlObj = new URL(url);
        if(url.startsWith("https://")){
            http = (HttpsURLConnection) urlObj.openConnection();
        }else{
            http = (HttpURLConnection) urlObj.openConnection();
        }
        http.setRequestMethod("GET");
        http.setConnectTimeout(30 * 1000);
        http.setReadTimeout(30 * 1000);
        http.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36");
        http.setDefaultUseCaches(false);

        http.connect();

        Map<String, List<String>> resHeaders = http.getHeaderFields();
        for (Map.Entry<String, List<String>> entry : resHeaders.entrySet()) {
            String name = entry.getKey();
            if ("X-ErrNo".equalsIgnoreCase(name)) {
                return false;
            }
        }

    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (http != null) {
            http.disconnect();
        }
    }
    return true;
}

 

赞(1) 打赏
如果文章对你有帮助,欢迎你来评价反馈。AgainFly » 微信公众号头像链接判断是否有效

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  • Q Q(选填)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏