2016-02-18 64 views
0

在php中,我想用file_get_contents取消一些網址。file_get_contents/curl和400一些網址的錯誤請求(沃爾瑪..)

對於大多數的網址,它的工作,但一些網址,如walmart.com,buybuybaby.com。

源代碼安靜簡單,但有一個技巧來提取這些類型的網址(walmart.com ...)?

我已經嘗試過的file_get_contents,並與捲曲,但仍然沒有工作

感謝您事先的任何幫助

$url="http://www.buybuybaby.com/"; 
$homepage = file_get_contents($url); 
echo $homepage; 

錯誤: 警告:的file_get_contents(https://www.buybuybaby.com/):未能打開流:HTTP請求失敗! HTTP/1.0 400錯誤的請求

+0

用於拒絕來自機器人請求的最常見(基本)「檢查」是檢查用戶代理標頭是否與實際瀏覽器相匹配。 //但如果這些網站已經有了這種措施,那麼他們可能不希望你首先刮掉它們的內容。 – CBroe

+0

@CBroe--這不是在這裏發生的事情。服務器只是扼殺了請求。 – pguardiario

+0

@CBroe:很容易測試。如果您以用戶代理的身份發送'我是機器人',您將得到很好的回覆。 – pguardiario

回答

0

你應該使用,而不是

function curl_get_content($url, $post = "", $refer = "", $usecookie = false) 
{ 
    $curl = curl_init(); 
    curl_setopt($curl, CURLOPT_URL, $url); 

    if ($post) { 
     curl_setopt($curl, CURLOPT_POST, 1); 
     curl_setopt($curl, CURLOPT_POSTFIELDS, $post); 
    } 

    if ($refer) { 
     curl_setopt($curl, CURLOPT_REFERER, $refer); 
    } 

    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/6.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.7) Gecko/20050414 Firefox/1.0.3"); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); 
    //curl_setopt($curl, CURLOPT_TIMEOUT_MS, 5000); 

    if ($usecookie) { 
     curl_setopt($curl, CURLOPT_COOKIEJAR, $usecookie); 
     curl_setopt($curl, CURLOPT_COOKIEFILE, $usecookie); 
    } 

    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 

    $html = curl_exec($curl); 
    if (curl_error($curl)) { 
     echo 'Loi CURL : ' . (curl_error($curl)); 
    } 
    curl_close($curl); 
    return $html; 
} 

因爲file_get_contents功能發送一個請求嫋嫋不包括header信息來源或use-agent信息。 CURL生成一個請求,如瀏覽器請求。和沃爾瑪,亞馬遜,Facebook等...不要扣留您的請求

+0

謝謝凱文,它的工作就像一個魅力 – user3392106

+0

嗯,它對一些網址很奇怪。例如,我只有URL http://www.official.my/freebacklinks.php只有特殊字符....任何想法? – user3392106