爬虫解析接口时请求头是至关重要的一部分,部分笔记,如果还有其他实战接触到请求头会继续完善
前端 – token 是什么?为什么每次请求头(HEADS)里要携带它?
Token
token
是客户端频繁向服务器端请求数据,服务器频繁的去数据库查询用户名和密码进行对比,判断用户名和密码正确与否,并作出相应的提示,在这样的背景下,token
便应运而生了。
目的
token
的目的是为了减轻服务器的压力,减少频繁的查询数据库。
在前端请求后台的 API
接口的时候,为了安全性,一般需要再用户登录成功之后才能发送其他请求。
因此,在用户登录成功之后,后台会返回一个 token
给前端,这个时候我们就需要把 token
暂时保存在本地,每次发送请求的时候需要在 header
里边带上 token
(无需再次带上请求名和密码),这个时候本地的 token
和后台数据库中的 token
进行一个验证,如果两者一致,则请求成功,否则失败。
用什么作为 Token 标识合适
一、使用设备号/设备mac地址作为token(推荐)
客户端:客户端在登录的时候获取设备的设备号串号 / mac
地址,并将其作为参数传递到服务器端。
服务器:服务器接收到该参数之后,使用一个变量接收同时将其作为 token
保存数据库,并将该 token
设置在 session
中,客户端每次请求的时候都要统一拦截,并将客户端传递的 token
和服务器 session
中的 token
对比,如果相同则放下,不同则拒绝。
优点:客户端不需要重新登录,只要登录一次后就能一直使用。
缺点:客户端需要带设备号/mac地址作为参数传递
curl get请求添加header头信息
function get($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出。
$header = ['User-Agent: php test']; //设置一个你的浏览器agent的header
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_HEADER, 1); //返回response头部信息
curl_setopt($ch, CURLINFO_HEADER_OUT, true); //TRUE 时追踪句柄的请求字符串,从 PHP 5.1.3 开始可用。这个很关键,就是允许你查看请求header
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
echo curl_getinfo($ch, CURLINFO_HEADER_OUT); //官方文档描述是“发送请求的字符串”,其实就是请求的header。这个就是直接查看请求header,因为上面允许查看
curl_close($ch);
return $result;
}
Postman之模拟请求头
可以例用postman添加头部信息的方式成功请求
附附加一个扯淡联盟解析请求头视频接口
//扯淡联盟推荐带协程
public function getvideoscdtj(){
for ($i=100;$i>=1; $i--){
co(function () use ($i) {
$data=array();
$url = "https://api.aichedan.com/api/v3/article/loadList?category=COMMEN";
$header=["uuid:f0:0f:ec:8d:32:91"];
$eq=$this->getapktj($url,$header);
$res=$eq['data']['article'];
if(!empty($res)){
foreach ($res as $re){
$r['title']=$re['textContent'];
$r['coverpath']=$re['jokeMediaList'][0]['coverUrl'];
$r['videopath']=$re['jokeMediaList'][0]['mediaUrl'];
$r['author']="扯淡联盟推荐";
$r['created_at']=time();
$data[]=$r;
}
$m=Db::table('videos')->insert($data);
}
echo($i);
});
}
}
//扯淡联盟颜值
public function getvideoscdyz(){
for ($i=100;$i>=1; $i--){
$data=array();
$url = "https://api.aichedan.com/api/v3/article/loadList?category=YANZHI";
$header=["uuid:f0:0f:ec:8d:32:91"];
$eq=$this->getapktj($url,$header);
$res=$eq['data']['article'];
if(!empty($res)){
foreach ($res as $re){
$r['title']=$re['textContent'];
$r['coverpath']=$re['jokeMediaList'][0]['coverUrl'];
$r['videopath']=$re['jokeMediaList'][0]['mediaUrl'];
$r['author']="扯淡联盟";
$r['created_at']=time();
$data[]=$r;
}
$m=Db::table('videos')->insert($data);
}
echo $i;
}
}
//扯淡联盟关注用户的视频列表
public function getusergzuid($sortId=""){
static $data=array();
$url = "https://api.aichedan.com/api/v3/follow/relation/follow/list?owerId=0eff350e-b49f-4dea-8590-c56da413e5f5&sortId=".$sortId;
$header=["userId: 0eff350e-b49f-4dea-8590-c56da413e5f5","token: MGVmZjM1MGUtYjQ5Zi00ZGVhLTg1OTAtYzU2ZGE0MTNlNWY1"];
$eq=$this->getapktj($url,$header);
$data=$eq['data'];
if(!empty($data)){
foreach ($data as $da){
$this->getvideosgzuser($da['userId']);
$sortid=$da['sortId'];
}
$this->getusergzuid($sortid);
}
}
public function getvideosgzuser($ownId){
for ($i=100;$i>=1; $i--){
$m=$i*10;
$data=array();
$url = "https://api.aichedan.com/api/v4/dynamics/article/list/new?owerId=".$ownId."&lastArticleId=&articlePageStart=".$m;
$header=["userId: 0eff350e-b49f-4dea-8590-c56da413e5f5","token: MGVmZjM1MGUtYjQ5Zi00ZGVhLTg1OTAtYzU2ZGE0MTNlNWY1"];
$eq=$this->getapktj($url,$header);
$res=$eq['data']['dynamics'];
if(!empty($res)){
foreach ($res as $re){
$r['author']="扯淡联盟";
$r['title']=$re['article']['textContent'];
$r['coverpath']=$re['article']['jokeMediaList'][0]['coverUrl'];
$r['videopath']=$re['article']['jokeMediaList'][0]['mediaUrl'];
$r['created_at']=time();
$data[]=$r;
}
$m=Db::table('videos')->insert($data);
}
var_dump($i);
}
}
//跨服务器高级用法
public function getapktj($url,$header=[]){
$method ="GET";
$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_FAILONERROR, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
$ret = curl_exec($curl);
$all=json_decode($ret,true);
return $all;
}
//视频去重
public function distinctvideo(){
$sql="DELETE from videos WHERE (title) in (SELECT title from (SELECT title FROM videos where title!='' GROUP BY title HAVING COUNT(*)>1) s1) AND id NOT in (SELECT id from (SELECT id FROM videos GROUP BY title HAVING COUNT(*)>1) s2);";
$mm=Db::delete($sql);
return json_encode($mm);
}
有数据就可以衍生出一个马甲网站: