我正在尝试检索使用php cURL库发出的http请求的原始附件。现在我得到了html响应,但没有附件。
有一个非常相似的问题here表示使用cURL选项-j。我在php cURL库中找不到等效的set_opt。
当我在浏览器中发出请求时,标题信息中会引用所需的附件,浏览器知道自动下载它。在我的脚本中,我只需要将附件的原始数据加载到变量中。
如何将附件数据加载到php中的变量中?
远程服务器的标头响应:
Cache-Control:must-revalidate, post-check=0, pre-check=0
Content-Disposition:attachment; filename=exel_file.xls
Content-Length:65
Content-Transfer-Encoding:binary
Content-Type:application/download
Date:Thu, 30 Jun 2016 15:12:05 GMT
Expires:Mon, 26 Jul 1997 05:00:00 GMT
Last-Modified:Thu, 30 Jun 2016 16:33:14 GMT
Pragma:public
Server:Microsoft-IIS/7.5
X-Powered-By:PHP/5.2.17
我的php cURL请求:
$url = "https://subdomain.example.com?parameter=1";
$post = "post1=false&".
"post2=&".
"post3=false&".
"post4=&".
"post5=&".
"post6=1243123421";
$ch = curl_init($url);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookieFile);
curl_setopt ($ch, CURLOPT_COOKIEFILE, $cookieFile);
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$html = curl_exec($ch);
我已经尝试直接在https://subdomain.example.com/exel_file.xls访问exel_file.xls但无济于事。
更新: 当我在Chrome开发人员工具中找到它时,我确实设法直接访问该文件。我将网络响应过滤到“doc”,并发现请求与附件绑定。该文件位于https://example.com/exel_file.xls,而不是https://subdomain.example.com/exel_file.xls。
答案 0 :(得分:1)
将CURLOPT_BINARYTRANSFER设置为TRUE并设置内容类型。
<?php
$url = "http://slackbuilds.org/slackbuilds/13.37/multimedia/umplayer.tar.gz";
$opts = array(
CURLOPT_URL =>$url,
CURLINFO_CONTENT_TYPE => "text/xml",
CURLOPT_BINARYTRANSFER => TRUE,
CURLOPT_RETURNTRANSFER => TRUE
);
$ch = curl_init();
curl_setopt_array($ch, $opts);
$data = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
header("Content-Type: application/x-gzip");
header("Content-disposition: attachment; filename=zipfile.tar.gz");
echo $data;
?>
这有用吗