我正在为我们客户的一个网站进行网页抓取。一切正常。但我遇到一个问题,字体不起作用。我在 Chrome 控制台中收到以下错误:
Access to Font at 'https://www.example.com/fonts/fontawesome-webfont.woff?v=4.2.0' from origin 'http://www.mydomain' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://www.mydomain' is therefore not allowed access.
我尝试将以下代码放入 http://www.mydomain 中.htaccess 文件但没有运气
.htaccess
<IfModule mod_headers.c>
<FilesMatch "\.(ttf|ttc|otf|eot|woff|font.css|css)$">
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Headers "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With"
Header set Access-Control-Allow-Methods "GET, PUT, POST"
</FilesMatch>
</IfModule>
注意:我无法进行任何更改 https://www.example.com
并且在我的浏览器中缓存也被禁用。
用于网页抓取的 php 代码:
$cookie = 'cookies.txt';
$timeout = 90;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 400);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout );
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_USERAGENT,
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($ch, CURLOPT_FILETIME, true);
$curl_scraped_page = curl_exec($ch);
curl_close($ch);
echo $curl_scraped_page;
编辑
apache headers 模块也已启用
最佳答案
允许从服务器 www.mydomain
服务器 www.example.com< 上的网站访问服务器
需要允许来自 www.example.com
上的字体www.mydomain
的请求。对于服务器 www.example.com
上的 HTTP 请求 (get) 响应,响应必须(至少)包含以下 header :
Access-Control-Allow-Origin: http://www.mydomain
如果您无法控制以这种方式配置服务器www.example.com
,您还需要下载资源并将其与抓取的内容放在一起并更改指向它的链接。有关使用 PHP 进行 HTML 处理的介绍,请参阅问答引用资源 "How do you parse and process HTML/XML in PHP?"。还有现成的用于抓取的 PHP 库可以为您的任务提供支持。
关于php - 网页抓取字体访问问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44513599/