2017-06-13 141 views
2

我正在爲我們客戶的網站之一進行網絡抓取。所有工作正常。但是我收到了一個字體不起作用的問題。我得到的鉻控制檯以下錯誤:在 網絡抓取字體訪問問題

訪問字體「https://www.example.com/fonts/fontawesome-webfont.woff?v=4.2.0」從 出身「http://www.mydomain」已被阻止通過CORS政策:否 「訪問控制允許來源」標頭是存在在請求的 資源。原因'http://www.mydomain'因此不允許 訪問。

enter image description here

我已經盡力把下面的代碼在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; 

EDIT

apache的頭模塊也啓用

enter image description here

+0

請檢查一次頭模塊啓用或不使用'a2enmod頭'。 –

+1

@PareshBarad對不起。我無法得到你。你能解釋更多嗎? –

+0

我已經檢查了你的代碼,但是我沒有發現你的代碼有任何問題,所以我給你啓用** apache headers模塊**的一點點建議,如果你使用的是Linux系統或服務器,那麼你可以按照這個[回答](https://stackoverflow.com/a/22655232) –

回答

3

要啓用訪問服務器www.example.com上的字體來自網絡服務器上的網站www.mydomain服務器www.example.com需要允許來自www.mydomain的請求。對於在響應於HTTP請求的服務器www.example.com上(GET)的響應必須包含(至少)下面的頭:

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

如果沒有控制配置服務器www.example.com以這樣的方式,您還需要下載資源,並將其與刮掉的內容放在一起並更改鏈接。請參閱Q &參考資源"How do you parse and process HTML/XML in PHP?"以瞭解使用PHP進行HTML處理的介紹。還有現成的PHP庫,可以幫助您完成任務。

1

有很多原因可能不適合你。

  1. Web服務器配置:您的Web服務器未配置爲識別個人.htaccess。您必須在正確的位置(通常爲apache2.conf)正確指定AllowOverride指令(對於Apache)。
  2. 您正在使用將您的主頁請求重寫爲http版本的軟件(例如)WordPress。
  3. 您正在使用的字體資源

只有HTTPS版本中的情況後,你可以重寫腳本加載基於請求協議的資源。 e.g:

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

這將使如果你有機會到example.com的源代碼瀏覽器使用任何基於HTTP或HTTPS的請求。如果你不這樣做,那麼你可以刮掉example.com的https版本而不是破解CORS配置。