2017-01-16 108 views
1

我想讀一小部分的網頁。起初我認爲問題是urlencode所以補充說,但問題仍然存在。無法打開流:沒有這樣的文件或目錄與網頁

該腳本從google.com等簡單鏈接中讀取的效果很好,但它不適用於我想要的鏈接。

<?php 
     $link = "http://www.adidas.co.uk/nmd_r1-bape-camouflage-shoes/BA7326.html"; 
     $newlink = urlencode($link); 

     $linkcontents = file_get_contents($newlink); 
     $needle = "Sold out"; 
     if(strpos($linkcontents, $needle) == true){ 
      echo "String found"; 
     } else{ 
      echo "String not found"; 
     } ?> 
+0

有沒有必要使用'urlencode' –

+0

是的,我也這麼認爲,但它仍然帶來了一個不同的錯誤。 「未能打開流:HTTP請求失敗!HTTP/1.0 403禁止在」 – bsaid97

回答

2

林改變了我的答案,因爲我這樣做下面的代碼:

$link = "http://www.adidas.co.uk/nmd_r1-bape-camouflage-shoes/BA7326.html"; 

// create curl resource 
$ch = curl_init(); 

// set url 
curl_setopt($ch, CURLOPT_URL, $link); 

// $output contains the output string 
$output = curl_exec($ch); 

die(var_dump($output)); 

,它給了我這個響應

對不起,你已經被封鎖

您無法訪問本網站

我爲什麼被封鎖?

本網站使用安全服務來保護自己免受在線 攻擊。您剛剛執行的操作觸發了安全性 解決方案。有幾個動作可能會觸發此塊 ,包括提交某個單詞或短語,SQL命令或不正確的數據。

我該怎麼做才能解決這個問題?

如果你是一個個人的連接上,像在家裏一樣,你可以在你的設備上運行的 反病毒掃描,以確保它不會感染 惡意軟件。

如果您位於辦公室或共享網絡,則可以要求網絡管理員 在整個網絡上運行掃描,以尋找 錯誤配置或受感染的設備。

HTTP 403 - 禁止「

看來你是無法做到的阿迪達斯網站上的任何webscraping

+0

謝謝!我以前從未使用cURL,因此我需要使用它。不管怎麼說,多謝拉! – bsaid97

+0

@ bsaid97沒問題,如果你真的需要使用addidas網站,我認爲你可以通過他們的API訪問你的信息:https://developers.adidas.com/ |如果你以前從未使用API​​,可能會有點困惑,但只要進行一點研究,我一定會好起來的! –

0

你不需要urlencode

你正在嘗試將網站。訪問迴應403 Forbidden

file_get_contents(http://www.adidas.co.uk/nmd_r1-bape-camouflage-shoes/BA7326.html): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden 

這是因爲file_get_contents不會從網站的角度發送正確形成的請求。

您應該使用捲曲或其他請求工具,如狂飲,併發送由您要刮網站了解正確格式的請求(例如:狂飲默認會發一些標題所以應該工作)。

0

很可能遠程主機正在過濾掉沒有有效頭信息的連​​接(例如,像用戶代理)。

你可以欺騙它通過創建一個stream context(通常最好使用捲曲這些東西):

$opts = array(
    'http'=>array(
    'method'=>"GET", 
    'header'=>"Accept-language: en\r\n" . 
       "Cookie: foo=bar\r\n" . 
       "User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2228.0 Safari/537.36\r\n" 
) 
); 

$ctx = stream_context_create($opts); 

$content = file_get_contents($url,false,$ctx); 

免責聲明:雖然這可能在返回HTML工作,事實證明遠程主機把這些檢查在適當的位置可能表明這樣做會違反其使用條款。如果你的知識產權被列入黑名單,不要責怪我。

相關問題