使用cookie获取QQ头像(JSP版)

由于腾讯现在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^_^

updatedupdated2023-12-062023-12-06