2010-07-24 114 views
1

如何將標題發送到網站,就好像PHP/Apache是​​瀏覽器一樣?我試圖刮一個網站,但它看起來像他們發送一個404錯誤,如果它來自另一臺服務器...通過PHP發送瀏覽器標題

或者,如果你知道任何其他好方法從網站刮內容?

而且,這裏是我當前的代碼:

<?php 
    $curl_handle=curl_init(); 
    curl_setopt($curl_handle,CURLOPT_URL,$_GET['url']); 
    curl_setopt($curl_handle, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)"); 
    curl_setopt($curl_handle, CURLOPT_REFERER, "http://google.com"); 
    curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,2); 
    curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1); 
    $buffer = curl_exec($curl_handle); 
    curl_close($curl_handle); 
    echo $buffer; 
?> 

所以,我會作出像一個AJAX請求:

/spider.php?url=http://target.com 

它返回一個空字符串。我知道這是設置正確,但因爲如果我切換目標與twitter.com它的作品...我錯過了什麼使它看起來像一個完整的瀏覽器?

+0

設置[捲曲](HTTP:/ /www.php.net/curl)? – BoltClock 2010-07-24 06:11:32

+0

我正在使用cURL – 2010-07-24 06:23:27

回答

3

對於捲曲,存在對CURLOPT_USERAGENT選項,

curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)"); 

但是它也可能是否使用檢查Referer標頭,其可以通過

curl_setopt($ch, CURLOPT_REFERER, "http://<somesite>"); 
+0

檢查我的更新後... target.com不工作,返回一個空字符串,但Twitter的作品。有任何想法嗎? – 2010-07-24 06:42:04

+1

關於你的代碼: 1.你應該嘗試增加超時至少10 2.您應該抓住頭了。用curl_setopt($ curl_handle,CURLOPT_HEADER,true);在殺死你的句柄之前,你應該從curl_error($ curl_handle)中檢索錯誤。它會爲您提供進一步的提示,確切地說錯了什麼。 – 2010-07-24 07:04:00

+0

你搖滾!這是一個301移動到www,如果我做了http://www.target.com它的作品。那麼,我如何關注所有的301s直到200? – 2010-07-24 07:10:01

2

如果您使用的捲曲,可以使用CURLOPT_HTTPHEADER選項,它可以將您希望與發送請求頭的數組。

如果您使用的是file_get_contents(),則可以將其傳遞給使用stream_create_context()創建的流上下文。

+0

你知道如何改變瀏覽器嗎? – 2010-07-24 06:23:01

+0

這將是'User-Agent'標頭。我的瀏覽器發送的User-Agent頭是Mozilla/5.0(X11; U; Linux x86_64; en-US; rv:1.9.2.8pre)Gecko/20100718 Ubuntu/10.04(lucid)Namoroka/3.6.8pre' for實例。 – 2010-07-24 06:33:39

+0

謝謝,我還添加了Daniel的代碼,但它仍然爲target.com和twitter.com返回一個空字符串...任何想法爲什麼? – 2010-07-24 06:40:20

相關問題