2011-04-26 54 views
0

請看一看這個示例代碼:使用cURL獲取多個http響應代碼?

function http_response($url) 
{ 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_HEADER, TRUE); 
     curl_setopt($ch, CURLOPT_NOBODY, TRUE); // remove body 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
     $head = curl_exec($ch); 
     $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 

     echo $httpCode ; 
} 

這段代碼將打印給定的URL的httpCode。我有幾個問題:

  1. 我可以擺脫一些setopt()行在這裏,仍然得到httpCode?
  2. 如果我想同時檢查多個URL,那麼呢?我可以修改代碼嗎?
  3. 我可以使用不同於cURL的庫以更簡單的方式執行相同的功能嗎?

謝謝:)

回答

1
  • 你應該能夠刪除CURLOPT_HEADERCURLOPT_NOBODY,仍然得到同樣的結果。
  • 你可以是這樣做的:

    $urls = array(
        'http://google.com', 
        'http://facebook.com' 
    ); 
    
    $status = array(); 
    
    foreach($urls as $url){ 
        $status[$url] = http_response($url); 
    } 
    

    嘗試在此之後print_r($status);,你會看到結果。

  • 你可以用file_get_contents$http_response_header來做到這一點,以瞭解更多:http://www.php.net/manual/en/reserved.variables.httpresponseheader.php然而,我仍然會推薦使用cURL。

+0

謝謝玫瑰。關於第二點,我想完成並行檢查多個URL以節省時間。我認爲循環方法在這裏並不好,因爲它會一個接一個地處理url。有任何想法嗎? – iTurki 2011-04-26 23:16:23

+0

您可以產生多個進程並讓它們並行運行。 – kmoser 2011-04-27 07:56:45

+0

看看http://php.net/manual/en/function.popen.php你不會節省那麼多時間,但它可能是值得一試的。 – 2011-04-27 10:08:23

0

* 2。要檢查多個url,你必須在任何編程語言的循環中使用這個函數1從server = 1連接到該服務器的響應。如果要使用1個函數從多個服務器獲取響應,則可以始終將數組傳遞給該函數,並執行函數

* 3中的循環。你可以試試這種方式:

function get_contents() { 
    file_get_contents("http://example.com"); 
    var_dump($http_response_header); 
} 


get_contents();