微信公众号开发,会拉取用户资料,其中有一个用户的头像链接,一旦当用户更换头像这个链接便会失效。
如果前期存储了这个链接,但是当用户更换头像,我们又没有重新获取用户资料来更新数据,则会显示失效图片:
利用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; }
最新评论