2012-03-03 64 views
2

我有一個可以通過HTTP或HTTPS訪問的URL。我想發送HEAD或GET請求,這是最快的,並得到響應代碼,所以我知道URL是否啓動或關閉。使用Zend和Curl獲取HTTP響應代碼

我該如何使用Zend_HTTP_Client來做到這一點?我使用了get_headers()函數,但它在一些遠程服務器上非常慢。我不確定它是否處理HTTPS。

+1

儘管'HEAD'可能會更快,但使用GET可能會更好,因爲並非所有服務器都會接受'HEAD'請求。如果PHP對其本地流包裝具有'ssl'支持,'get_headers'將只能使用'https'。通常通過編譯PHP'--with-ssl'來實現。 – drew010 2012-03-03 20:54:03

+0

@ drew010關於'HEAD'的好處,就是今天碰到的 - 如果我嘗試了'HEAD'(一個我真的只想知道文件是否存在的情況),就得到了'405'。 – 2012-03-03 21:03:15

回答

5

您可能不想使用Zend_Http_Client來代替 - 使用原生PHP函數(如fsockopen,因爲它看起來您希望這是有效的)。

也就是說,這可能會爲你工作(和,因爲它默認爲插座適配器,它可能不是低效率比使用本地函數):

$client = new Zend_Http_Client(); 
$response = $client->setUri($uri)->request(Zend_Http_Client::HEAD); 

如果沒有,你可以嘗試設置手動選擇cURL選項。

$adapter = new Zend_Http_Client_Adapter_Curl(); 
$adapter->setCurlOption(CURLOPT_NOBODY, true); 

$client = new Zend_Http_Client(); 
$client->setAdapter($adapter); 
$response = $client->setUri($uri)->request(Zend_Http_Client::HEAD); 

該代碼未經測試。使用風險自負。

+0

不錯的答案,我同意一個簡單的'fsockopen'可能已經足夠用於他正在做的事情,並且肯定需要更少的開銷。 – drew010 2012-03-03 20:54:51

+0

@ drew010我可能實際上是在互相測試它們,因爲默認'Zend_Http_Client'正在使用套接字。我想你可以通過關閉連接節省時間,只要你知道URL是活動的(忽略一些標題)。 – 2012-03-03 21:02:03

+0

捲曲代碼的工作真的很不錯..特別是與超時值..謝謝 – Jake 2012-03-04 19:08:52