Home>Article>Backend Development> 求指点PHP里的curl_exec有关问题

求指点PHP里的curl_exec有关问题

Linda Hamilton
Linda Hamilton Original
2016-06-13 12:03:06 1067browse

求指点PHP里的curl_exec问题

本帖最后由 easyrecovery8 于 2014-07-25 08:17:46 编辑 某网盘的压缩包rar格式外链有referer检测防盗链,本人想把它放到博客上供人下载,于是学习PHP伪造referer,但是得到的结果是一串乱码,估计是把压缩包以文本的形式输出了,本人是菜鸟,求大神指点如何让它以打开原连接的形式下载啊
我的代码如下:
$url = '某个连接地址url.rar格式';
$ch = curl_init(); //初始化
curl_setopt($ch, CURLOPT_URL, $url); //你要访问的页面
curl_setopt($ch, CURLOPT_REFERER, '某个来路url'); //伪造来路页面
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$content = curl_exec($ch); //执行
curl_close($ch); //关闭
echo $content;
?>

------解决方案--------------------
你把这些得到的结果另存成rar格式,如果能打开,说明内容是对的。这样的话,只需要输出一下Header信息就可以了:
header("Content-type: application/octet-stream");
Header("Content-Disposition: attachment; filename=download.rar" );

------解决方案--------------------
引用:
Quote: 引用:

你把这些得到的结果另存成rar格式,如果能打开,说明内容是对的。这样的话,只需要输出一下Header信息就可以了:
header("Content-type: application/octet-stream");
Header("Content-Disposition: attachment; filename=download.rar" );


用这个能下载打开,很感谢!
但是改变了原RAR的文件名称,比如原下载地址的rar名称是 电子书.rar ,但是这个下载的就是download.rar,有什么办法让它保存为原名称吗?

这个需要你自己分析下载地址的关系
------解决方案--------------------
嗯,那样不行,头变成了正文。要这样
既然对方提供的是下载,那么相关信息自然已经都提供了,包括文件名和文件长度
$url = '/某个连接地址url.rar格式';
$ch = curl_init(); //初始化
curl_setopt($ch, CURLOPT_URL, $url); //你要访问的页面
curl_setopt($ch, CURLOPT_REFERER, '某个来路url'); //伪造来路页面
curl_setopt($ch, CURLOPT_HEADER, 1); //要读回 http 头
curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'func'); //监听返回的数据
curl_exec($ch); //执行

function func($ch, $str) {
static $s = '@';
if($s) {
$s = trim($str);
if($s) header($s); //如果是头信息,则发送相应的头
}else echo $str; //否则发送数据
return strlen($str);
}


------解决方案--------------------
中文文件名出现乱码是正常现象
服务端可能是gbk或utf-8 编码的
客户端也可能是gbk或utf-8 编码的
你需要在收到形如 Content-Disposition: attachment; filename=download.rar 这样的头信息时对其中中文文件名做一下判断,必要时根据客户端的字符集进行转码处理
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn