利用API获取数据
首先当然是找接口,有一说一,关于B站的头像接口真的挺麻烦的,网上有的资料还非常少,费尽千辛万苦才找到接口的使用方法,自己也研究了半天,一直F12调试,这里就不细说了,接口奉上直接用就完事了 https://api.bilibili.com/x/space/acc/info?mid=
。
后面填上用户的uid即可,这里我就拿我自己的账号测试,毕竟涉及到个人隐私,还是决定拿自己做实验。
如上图,我们获取到了一串JSON格式的数据,仔细观察就会发现不仅仅是头像的链接,还有挂件什么的都有,那接下来就好办了。
PHP如何实现
先用html准备一个用来获取用户输入uid的表单,然后就用PHP返回一个地址打开就好了。
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="referrer" content="no-referrer" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
</style>
</head>
<body>
<form action="index.php" method="POST">
<p>请输入bilibili的UID: <input type="text" name="bilibiliuid" autocomplete="off"></p>
<input type="submit" value="提交">
</form>
<?php
$uid = $_POST['bilibiliuid'];
if (empty($uid)) {
echo "<scrip>alert('登录失败-未填写B站UID');history.go(-1);</scrip>";
} else {
$Api = file_get_contents('https://api.bilibili.com/x/space/acc/info?mid=' . $uid);
echo "<script>window.open(($Api.data.face));</script>";
} ?>
</body>
</html>
这里有一个需要注意的地方,<meta name="referrer" content="no-referrer" />
这段代码不能少,这一段代码非常重要,如果没有,那么你获取到的页面将是403。这是因为B站有外链的保护措施, 即页面中引入外网的链接资源,会产生一个新的http请求。为了安全(URL里可能包含用户信息),浏览器一般都会给这写请求头加上表示来源的referrer 字段,这段代码意思是隐藏外部链接中的referrer参数。