【问题标题】:curl a css file didn't work while it work in the html page卷曲一个css文件在html页面中工作时不起作用
【发布时间】:2017-06-26 14:42:49
【问题描述】:

如果我尝试像这样 https://web.archive.org/web/20170322073013cs_/http://afterschoolprograms.com/sites/all/themes/afterschoolprograms_dev/style.css?n 卷曲这个 css 文件,它会返回 403 Forbidden 错误。 如果我尝试在浏览器中打开它,它会返回相同的错误

如果我打开此页面 https://web.archive.org/web/20170322073013/http://afterschoolprograms.com/,此 css 页面可以正常工作并返回 302 导致 css 文件正常工作。

然后如果用浏览器再次打开同一个css文件,它就可以正常工作了。

我怎样才能始终卷曲这个 css 文件并返回导致 css 文件正常工作的 302 重定向?

这是我目前正在使用的 php 代码,它总是返回 403 Forbidden 错误:

$url = "https://web.archive.org/web/20170322073013cs_/http://afterschoolprograms.com/sites/all/themes/afterschoolprograms_dev/style.css?n";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 30); //timeout in seconds
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // follow 301 redirection       
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_USERAGENT,'waybackmachinedownloader');
$html = curl_exec($ch);
curl_close($ch);

【问题讨论】:

  • 可能是一些简单的事情,比如推荐人检查......但是你能解释一下为什么你首先需要通过 cURL 来做这个吗?如果您需要“旧”站点的 CSS,那么我假设您会下载一次,然后将其放在您自己的服务器上或某处。像那样。但是,如果您一遍又一遍地请求它(可能在您自己网站的每次负载上?),那么我会理解他们为什么不想要这个并采取措施防止它 - 他们不想被滥用为 CDN。
  • 我丢失了这个网站,想从archive.org 上抓取它。如何在不收到此 403 禁止错误的情况下执行干净的 curl 请求?可以给我需要用到的php代码吗?

标签: php curl http-status-code-403


【解决方案1】:

按照 Cbroe 的建议,添加 referer 标头有效:

<?php

$url = 'https://web.archive.org/web/20170322073013cs_/http://afterschoolprograms.com/sites/all/themes/afterschoolprograms_dev/style.css?n';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_REFERER, 'https://web.archive.org/web/20170322073013/http://afterschoolprograms.com/');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);
curl_close($ch);

var_dump($html);

?>

【讨论】:

  • 您好 Bertrabd,我刚刚尝试了您的代码,它返回“bool(false)”
  • 您可以使用this post的解决方案来捕获错误
  • 您的代码几乎是正确的。我刚刚添加了 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);它奏效了..非常感谢:)
猜你喜欢
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 2012-06-04
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
相关资源
最近更新 更多