书接上文,我们继续对上回说到的问题继续分析,本文目标针对url中的sec_uid参数进行分析。
1、sec_uid
思路及实现
调用接口是通过xhr异步调用的,那么一定会有前台js代码来生成或者通过其他接口来获取这个参数,那么我们可以在浏览器端先搜一下这个参数名称,看看都再哪里出现过,然后跟一下调用链,希望最终能找到源头。
首先,我们搜一下前端的代码,发现sec_uid只再一个名称为index.98ac6f5d.js
文件中出现了几次,先挨个扫一眼,我们发现在1425和1474行的地方分别出现了以下2句代码:
url: '/web/api/v2/user/info/?sec_uid=' + config.sec_uid,
params.sec_uid = _utils2.default.getUrlParam(window.location.href, "sec_uid");
我们发现这个参数是从短链接跳转后的长连接里获取的,用这个参数调用了user/info接口,根据字面意思大概能知道这个接口是用户信息的接口
这里我们顺便看一下,怎么拿到这个长连接的url,这里用接口调试工具先试探看一下效果,我们可以看到,短链接是被302到具体地址了,那么我们后续可以通过HttpRequest来获取最终url以及携带的各项参数。
我们先来实现获取302地址的代码:
public static String get302Location(String requestUrl) {
String res = "";
HttpURLConnection httpUrlConn = null;
try {
URL url = new URL(requestUrl);
httpUrlConn = (HttpURLConnection) url.openConnection();
httpUrlConn.setDoOutput(true);
httpUrlConn.setDoInput(true);
httpUrlConn.setUseCaches(false);
httpUrlConn.setRequestProperty("Accept", "text/plain");
httpUrlConn.setRequestProperty("Content-Type", "application/json");
httpUrlConn.setRequestMethod("POST");
httpUrlConn.setInstanceFollowRedirects(false);//这里是重点,必须设置为false,时请求不进行重定向
String location=httpUrlConn.getHeaderField("Location");
httpUrlConn.disconnect();
return location;
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
httpUrlConn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
return res;
}
运行结果:
我们可以看到,这里已经成功拿到了302的目标地址,接下来,我们再写一个获取对应参数的方法。
public void getLocationParam(){
String url = "https://v.douyin.com/eCJaMPX";
String loca