详解爱文件下载接口请求思路
最近”爱文件” 百度文库下载资源下载,火爆全网,今天给大家讲解下他是如何请求的接口,主要是看原理,所有请求接口都类似。希望可以帮助到大家
为了方便我这边就用thinkphp5开发框架做演示了
1.首先我们得有控制器,新建一个控制器,并渲染模版:
//爱文件百度文库
public function aaa()
{
return $this->fetch(':aa');
}
2.然后新建模版页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>爱文件下载</title>
</head>
<body>
<form action="{:url('portal/index/aaa')}" method="post">
<input id="url" name="url" type="text">
<input id="submit_a" type="submit" value="一键下载">
</form>
</body>
</html>
form的控制器提交到刚刚新建的方法 提交方式选择post 写一个input 用于填写要下载的地址 另一个是提交按钮
3.既然有提交,那在控制器肯定得接收:
//爱文件百度文库
public function aaa()
{
$jieshou = input('url');
return $this->fetch(':aa');
}
这里可以通过dump()看看有没有接收到数据
4.接下来就是重点来了,我们来看看他是怎么请求的接口,我这边是用的谷歌浏览器,F12打开开发者工具,找到Network,改成如下图:
随便填写一个百度文库的地址 点击一键下载
5.这个时候我们就看到了接收回来的地址:
http://120.78.64.22:8888/doc/%e6%96%b0%e6%a6%82%e5%bf%b5%e8%8b%b1%e8%af%ad%e5%8d%95%e8%af%8d.xls
想都不用想 访问这个地址肯定可以把文件下载下来的:
6.现在我们来看下它请求的是哪个地址
我们可以看到form的action 是提交到file/down,有这个那就好办了
现在我们在控制器 定义一下请求地址:
//爱文件百度文库
public function aaa()
{
$jieshou = input('url');
$url = "http://aiwenjian.com/file/down";
return $this->fetch(':aa');
}
7.因为它做了限制肯定不是谁都能请求了,那么我们只能用他的域名模拟请求了,在header头里面可以看到
//爱文件百度文库
public function aaa()
{
$jieshou = input('url');
$url = "http://aiwenjian.com/file/down";
$header = [
'Referer: http://aiwenjian.com/'
];
return $this->fetch(':aa');
}
8.对了,还有一个问题,我们在之前看到的链接的百分号是经过处理的,所以我们这边也需要处理下:
//爱文件百度文库
public function aaa()
{
$jieshou = input('url');
$url = "http://aiwenjian.com/file/down";
$header = [
'Referer: http://aiwenjian.com/'
];
$url1 = "url=" . urlencode($jieshou);
return $this->fetch(':aa');
}
8.接下来就是做请求的事情了,我后边都写了备注,就不一个一个说了最终控制器代码
public function aaa()
{
$jieshou = input('url');
$url = "http://aiwenjian.com/file/down";
$header = [
'Referer: http://aiwenjian.com/'
];
$url1 = "url=" . urlencode($jieshou);
$ch = curl_init();//初始化curl
curl_setopt($ch CURLOPT_URL$url);//抓取指定网页
curl_setopt($ch CURLOPT_HEADER 0);
curl_setopt($ch CURLOPT_HTTPHEADER $header);
curl_setopt($ch CURLOPT_RETURNTRANSFER 0);//要求结果为字符串且输出到屏幕上
curl_setopt($ch CURLOPT_POST 1);//post提交方式
curl_setopt($ch CURLOPT_POSTFIELDS $url1);
$data = curl_exec($ch);//运行curl
curl_close($ch);
return $this->fetch(':aa');
}
最终表单代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>爱文件下载</title>
</head>
<body>
<form action="{:url('portal/index/aaa')}" method="post">
<input id="url" name="url" type="text">
<input id="submit_a" type="submit" value="一键下载">
</form>
</body>
</html>
以下就是文件的下载地址:
对此其他疑问的 可以留言