如何维护响应头

时间:2019-03-29 10:11:54

标签: php curl

我无法理解CURL如何处理标头。

我有一个site.com/page1,我想使用CURL进行访问,它将308重定向到site.com/page2/file.zip

我需要做的是使用CURL浏览site.com/page1,然后直接从site.com下载site.com/page2/file.zip

我正在使用此代码,但无法正常工作。它访问site.com/page1重定向到site.com/page2/file.zip,但在浏览器中打开文件

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, $_cookie_file);
curl_setopt($ch, CURLOPT_COOKIEFILE, $_cookie_file);
curl_setopt($ch, CURLOPT_REFERER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, true);

curl_exec($ch);
$error = curl_getinfo($ch);
curl_close($ch);

我想如果我能保留响应头,就可以解决问题。但是我该怎么做?如何为正在访问的网站向我发送的CURL访问者使用相同的标头。

2 个答案:

答案 0 :(得分:0)

您希望将cURL选项RETURNTRANSFER设置为true,以便返回的内容返回给您。由于您要保存的是ZIP文件,因此您还需要打开文件并使用CURLOPT_FILE选项来告诉cURL保存ZIP文件的位置。

curl_setopt ($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt ($ch, CURLOPT_TIMEOUT,'180');  # 3 minute timeout
$FileOut = fopen('MyZIP_File.zip','w') or die('Could not open the output data file');
curl_setopt ($ch, CURLOPT_FILE,$FileOut);
curl_exec   ($ch);
fclose($FileOut) or die('We ran into a problem saving data file');

答案 1 :(得分:0)

这解决了问题。

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, $_cookie_file);
curl_setopt($ch, CURLOPT_COOKIEFILE, $_cookie_file);
curl_setopt($ch, CURLOPT_REFERER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, true);

$result = curl_exec($ch);
if (preg_match('~Location: (.*)~i', $result, $match)) {
   $location = trim($match[1]);
   header('Location:' . $location);
}