当前位置: 首页 > 面试题库 >

使用curl获取PHP中的HTTP代码

章昆琦
2023-03-14
问题内容

我正在使用CURL来获取网站的状态(如果它处于启动状态/关闭状态或重定向到另一个网站)。我想使其尽可能地精简,但是效果不佳。

<?php
$ch = curl_init($url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_TIMEOUT,10);
$output = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

return $httpcode;
?>

我把它包装在一个函数中。它工作正常,但性能并不是最好的,因为它会下载整个页面,如果我删除$output = curl_exec($ch);它,它会一直返回0

有谁知道如何提高性能?


问题答案:

首先确保URL实际上是有效的(字符串,不是空,语法不错),这可以快速检查服务器端。例如,首先执行此操作可以节省大量时间:

if(!$url || !is_string($url) || ! preg_match('/^http(s)?:\/\/[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(\/.*)?$/i', $url)){
    return false;
}

确保仅获取标题,而不获取正文内容:

@curl_setopt($ch, CURLOPT_HEADER  , true);  // we want headers
@curl_setopt($ch, CURLOPT_NOBODY  , true);  // we don't need body

整体而言:

$url = 'http://www.example.com';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, true);    // we want headers
curl_setopt($ch, CURLOPT_NOBODY, true);    // we don't need body
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT,10);
$output = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

echo 'HTTP code: ' . $httpcode;


 类似资料:
  • 问题内容: 如何不使用来获取html源代码? 我需要知道这一点,因为在某些虚拟主机上已禁用,因此您不能使用。是否可以使用cURL获取html文件的源(如果启用了cURL支持)?如果是这样,怎么办?谢谢。 问题答案: 请尝试以下操作: 我只推荐小文件使用。大文件将作为一个整体读取,并且可能会产生内存错误。 编辑:在评论中进行了一些讨论之后,我们发现问题是服务器无法解析主机名,并且该页面另外是http

  • 问题内容: 谁能告诉我如何用HTTP POST进行php curl? 我想这样发送数据: 至 我希望curl会返回类似的响应。有什么例子吗? 问题答案:

  • 本文向大家介绍PHP中使用CURL获取页面title例子,包括了PHP中使用CURL获取页面title例子的使用技巧和注意事项,需要的朋友参考一下 通过PHP获取页面title内容的实战演示: 范例代码:

  • 下面的脚本通过请求返回“HTTP/1.1 401 Unauthorized”,但我不知道为什么。我知道,请求会发送到https,但我“拒绝”了“CURLOPT_SSL_VERIFYPEER”选项。。我想,这根本不是问题,是吗? 我想,卷发缺失还有一个选择... 答复: HTTP/1.1 401未经授权服务器:nginx日期:2015年5月19日星期二18:52:26 GMT内容类型:应用程序/js

  • 我正在尝试创建一个带有cURL的HTTP PUT请求,但我无法使其工作。我读过很多教程,但没有一个真正起作用。这是我当前的代码: 我也尝试过使用PHP PEAR,但得到了同样的结果。问题是存储库说没有设置元数据。我真的需要帮助!谢谢!

  • 您只能使用HTTP HEAD请求报头,如中的选项。 冗长的HTML响应体在命令行中很难得到,所以我希望只得到标题作为POST请求的反馈。但是,头和岗是两种不同的方法。 如何使curl只显示POST请求的响应头?