2012-03-03 15 views
2

HTTPまたはHTTPS経由でアクセスできるURLがあります。 HEADまたはGETリクエストを送信したいのですが、これは最も速く、レスポンスコードを取得するので、URLが上か下かを知ることができます。ZendとCurlを使用してHTTP応答コードを取得

Zend_HTTP_Clientを使ってどうすればいいですか? get_headers()関数を使用しましたが、一部のリモートサーバーでは非常に遅いです。 HTTPSを処理するかどうかはわかりません。

+1

'HEAD'は速くなる可能性がありますが、' HEAD'リクエストを受け付けるサーバーがすべてではないので、 'GET'を使うほうが良いかもしれません。 'get_headers'はPHPがネイティブストリームラッパーで' ssl'をサポートしている場合にのみ 'https'を使用できます。通常、PHPの '--with-ssl'をコンパイルすることで実現します。 – drew010

+0

@ drew010「HEAD」についての良い点は、今日のことです。「HEAD」を試してみると「405」があります(ファイルが存在するかどうかを本当に知りたい場合)。 –

答えて

5

この代わりにZend_Http_Clientを使用したくないかもしれません(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

+0

@ drew010実際には 'Zend_Http_Client'がソケットを使用しているので、実際にはそれらをお互いにテストするかもしれません。私はあなたがURLがアクティブであることを知ってすぐに(いくつかのヘッダーを無視して)接続を閉じることで時間を節約できると思います。 –

+0

カールコードは本当にnice..especiallyタイムアウト値で動作します..ありがとう – Jake

関連する問題