【问题标题】:Get HTTP Response code using Zend and Curl使用 Zend 和 Curl 获取 HTTP 响应代码
【发布时间】:2012-03-03 19:26:57
【问题描述】:

我有一个可通过 HTTP 或 HTTPS 访问的 URL。我想发送一个最快的 HEAD 或 GET 请求并获取响应代码,以便我知道 URL 是打开还是关闭。

如何使用 Zend_HTTP_Client 做到这一点?我使用了 get_headers() 函数,但在某些远程服务器上它非常慢。我不确定它是否处理 HTTPS。

【问题讨论】:

  • 虽然HEAD 可能更快,但您最好使用GET,因为并非所有服务器都会接受HEAD 请求。 get_headers 将只能使用 https 如果 PHP 在其原生流包装器上支持 ssl。通常通过编译PHP实现--with-ssl.
  • @drew010 关于HEAD 的好点子,今天刚刚遇到-如果我尝试HEAD 得到405(我真的只想知道文件是否存在)。

标签: php zend-framework curl zend-http-client


【解决方案1】:

您可能不想为此使用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);

代码未经测试。使用风险自负。

【讨论】:

  • 不错的答案,我同意一个简单的fsockopen 可能足以满足他的工作需求,而且肯定需要更少的开销。
  • @drew010 我实际上可能会相互测试它们,因为默认情况下Zend_Http_Client 使用套接字。我想您可以通过在知道 URL 处于活动状态后立即关闭连接来节省时间(忽略一些标头)。
  • curl 代码工作得非常好......尤其是超时值......谢谢
猜你喜欢
  • 2011-08-13
  • 2012-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-01
  • 2018-02-27
相关资源
最近更新 更多