访问试听页面,由于使用了windows media player插件,所以一定能够拿到音频文件的播放地址,就看对方隐藏的巧妙程度了。。。
1.音频文件页面http://wuquku.com/music-play-9923.html,看了一下没有将地址存放在html页面中;
2.继续找,找到是通过Ajax形式进行加载,9923是音乐id;
3.发送ajax请求获取音频文件地址:http://wuquku.com/template/music/ajax.php?action=geturl&t=p&id=9923
http%3A%2F%2Fwuqukumms.wuquku.com%2F%u4ea4%u8c0a%u821e%u66f2%2F%u5e7f%u573a%u821e%2F20110003%2F%7B%u5e7f%u573a%u96c6%u4f53%u821e%u66f2%7D%u547d%u8fd0%u4e0d%u662f%u8f98%u8f73%28ok%u771f%u5fc3%u4e0a%u4f20%29wuquku%u53d1%u5e03.mp3
注意:HTTP GET请求中必须有Referer选项,且必须是wuquku域名下,否则Ajax请求返回空;
4.对url地址进行unescape,可以直接用js的unescape方法获取地址,也可以用一下的java代码的uncaspe函数进行转义
class EscapeUnescape {
public static String escape(String src) {
int i;
char j;
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length() * 6);
for (i = 0; i < src.length(); i++) {
j = src.charAt(i);
if (Character.isDigit(j) || Character.isLowerCase(j) || Character.isUpperCase(j))
tmp.append(j);
else if (j < 256) {
tmp.append("%");
if (j < 16)
tmp.append("0");
tmp.append(Integer.toString(j, 16));
} else {
tmp.append("%u");
tmp.append(Integer.toString(j, 16));
}
}
return tmp.toString();
}
public static String unescape(String src) {
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length());
int lastPos = 0, pos = 0;
char ch;
while (lastPos < src.length()) {
pos = src.indexOf("%", lastPos);
if (pos == lastPos) {
if (src.charAt(pos + 1) == 'u') {
ch = (char) Integer.parseInt(src.substring(pos + 2, pos + 6), 16);
tmp.append(ch);
lastPos = pos + 6;
} else {
ch = (char) Integer.parseInt(src.substring(pos + 1, pos + 3), 16);
tmp.append(ch);
lastPos = pos + 3;
}
} else {
if (pos == -1) {
tmp.append(src.substring(lastPos));
lastPos = src.length();
} else {
tmp.append(src.substring(lastPos, pos));
lastPos = pos;
}
}
}
return tmp.toString();
}
public static void main(String[] args) {
String tmp = "~!@#$%^&*()_+|\\=-,./?><;'][{}\"";
System.out.println("testing escape : " + tmp);
tmp = escape(tmp);
System.out.println(tmp);
System.out.println("testing unescape :" + tmp);
System.out.println(unescape(tmp));
}
}