【问题标题】:web scraping font access issue网页抓取字体访问问题
【发布时间】:2017-06-13 06:14:33
【问题描述】:

我正在为我们客户的一个网站进行网络抓取。一切正常。但是我遇到了一个字体不起作用的问题。我在 chrome 控制台中收到以下错误:

在以下位置访问字体 'https://www.example.com/fonts/fontawesome-webfont.woff?v=4.2.0' 来自 来源“http://www.mydomain”已被 CORS 策略阻止:否 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用来源“http://www.mydomain” 访问。

我尝试将以下代码放入 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 标头模块也已启用

【问题讨论】:

  • 请检查是否启用了标头模块或未使用a2enmod headers
  • @PareshBarad 抱歉。我不能得到你。你能解释一下吗?
  • 我已经检查了你的代码,但我没有发现你的代码有任何问题,所以我给你一点建议来启用 apache headers module,如果你正在使用Linux 系统或服务器然后你可以关注这个answer
  • 标头模块已启用@PareshBarad。我在 Windows 上使用 WAMP
  • 有人不断对我的所有问题投反对票!!!无需说明任何理由

标签: php .htaccess fonts web-scraping


【解决方案1】:

要启用从服务器www.mydomain 上的网站访问服务器www.example.com 上的字体,服务器www.example.com 需要允许来自www.mydomain 的请求。对于服务器上的www.example.com,在对 HTTP 请求 (get) 的响应中,响应必须包含(至少)以下标头:

Access-Control-Allow-Origin: http://www.mydomain

如果您无法以这种方式配置服务器www.example.com,您还需要下载资源并将其与抓取的内容一起放置并更改指向它的链接。有关使用 PHP 处理 HTML 的介绍,请参阅问答参考资源 "How do you parse and process HTML/XML in PHP?"。还有现成的用于抓取的 PHP 库可以为您的任务提供支持。

【讨论】:

    【解决方案2】:

    这可能不适合您的原因有很多。

    1. Web 服务器配置:您的 Web 服务器未配置为识别单个 .htaccess。您必须在正确的位置(通常为 apache2.conf)正确指定 AllowOverride 指令(对于 Apache)。
    2. 您使用的软件(例如)Wordpress 将您的主页请求重写为 http 版本。
    3. 您仅使用 https 版本的字体资源

    如果是后者,您可以重写脚本以根据请求协议加载资源。例如:

    //maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css
    

    如果您有权访问 example.com 的源代码,这将允许浏览器根据请求使用 http 或 https。如果您不这样做,那么抓取 example.com 的 https 版本比破解 CORS 配置要好得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      • 2016-02-05
      • 2015-06-26
      • 1970-01-01
      • 2023-03-04
      相关资源
      最近更新 更多