2009-09-11 97 views
0

我正在爲客戶做一些自動化操作,並計劃在此過程中通過cURL運行一些PHP腳本。但是,在瀏覽器中正常工作的URL在被cURL命中時會出現404。我在其他地方看到,有些服務器被配置爲以這種方式阻止cURL。服務器配置爲發送404來自cURL的請求?

這是一個我可以在httpd.conf編輯的設置嗎?似乎不在php.ini

我的代碼是像這樣:

$url = "http://site.com/xxx/curl.php?cID=$c->cID&db=$c->db&un=$c->un&/"; 
    echo "$url"; 

    // spoofing FireFox 2.0 
    $useragent="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) 
    Gecko/20061204 Firefox/2.0.0.1"; 
    $ch = curl_init ($url) ; 
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1) ; 
    curl_setopt($ch, CURLOPT_USERAGENT, $useragent); 
    $res = curl_exec ($ch); 

當我回聲$res我從默認的404錯誤頁面獲取代碼。如果我複製回顯的$ url並粘貼到瀏覽器中,我可以看到頁面正常。還嘗試使用相對路徑和完整的服務器路徑。

今天添加了用戶代理欺騙,試圖看看是否說我不是cURL會有所幫助,但響應中沒有任何更改。

有關如何追蹤此問題或更好的根本原因但解決它的任何想法?

+1

轉儲firefox輸出的全套頭文件。轉儲當前由curl輸出的全套標題。繼續調整你的捲曲設置,直到它們匹配。 如果您的標題是相同的(包括Cookie),並且您以現實的速度請求頁面,則沒有真正的方法來區分curl和真實瀏覽器。 ...那麼,一個真正的瀏覽器請求圖像和腳本 - 不只是HTML :) – 2009-09-11 23:31:36

回答

1

事實證明,The Planet的友善人士在此帳戶中存在一些內部路由問題。/etc/sysconfig/network中的主機名設置不正確以及/etc/resolv.conf中的錯誤解析程序等等。這個和其他一些網站最近從一臺服務器遷移到另一臺。尚未修復,但這就是爲什麼404.

謝謝。