由于腾讯现在QQ头像必须要登录才能看到原头像,所以以前直接获取头像已经失效了(如这篇文章获取QQ头像地址),既然直接获取不行,那来个曲线救国吧~ PS:写完代码后才发现腾讯的头像隐私保护得挺好的,只有自己的好友或群友能获取全头像,非好友只能获取QQ内置头像。悲剧啊。。。 直接贴代码,以下代码是通过带cookie访问头像的链接,其实其他PHP等也可以实现的:
<%@ page language="java" contentType="image/bmp" pageEncoding="UTF-8"%><%@ page import="java.net.*,java.util.*,java.io.*"%><%
String qqnum = request.getParameter("qq");
URL url = new URL("http://face6.qun.qq.com/cgi/svr/face/getface?type=1&uin="+qqnum);
HttpURLConnection http = (HttpURLConnection) url.openConnection();
//设置Header
http.setRequestProperty("User-Agent", "Mozilla/5.0 (compatible; MSIE 6.0; Windows NT)");
http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
//设置Cookie,登陆WebQQ或者QQ空间可以查看cookie得到下面的值,请替换过来
//还不知道skey这个值会不会定期变化,QQ号码不够10位前面补0
http.setRequestProperty("Cookie", "uin=oQQ号码; skey=@安全码;");
http.setRequestMethod("GET");
http.setDoInput(true);
InputStream is = http.getInputStream();
//得到输出流,注意out是Writer类的对象,这里要用字节流
OutputStream os = response.getOutputStream();
//输出头像
while (is.available() > 0) {
os.write(is.read());
}
//在后台打印Header信息,不是必须
System.out.println(http.getResponseCode());
Map<String, List<String>> header = new HashMap<String, List<String>>();
header = http.getHeaderFields();
for (String str : header.keySet()) {
System.out.println(str + "" + header.get(str));
}
%>
可是只能获取自己好友的自定义头像,其他非好友只能获取QQ内置头像(一般不是那只企鹅),所以就懒得上传到服务器了,JSP可以上传到Google app engine^_^