用curl和php只获取http状态代码

qltillow  于 2022-11-13  发布在  PHP
关注(0)|答案(3)|浏览(193)

我试图只得到三位数的http状态码,而在变量$response中没有更多的内容。例如302,404,301等等。我注意到的另一个观察结果是在一些网站上,比如谷歌,它下载的似乎是身体的一部分,这是一个巨大的带宽浪费和缓慢。

<?php

$URL  = 'http://www.google.com';
$curlHandle = curl_init();
curl_setopt($curlHandle, CURLOPT_URL, $URL);
curl_setopt($curlHandle, CURLOPT_HEADER, true);
$response = curl_exec($curlHandle);
echo $response;  
?>
fiei3ece

fiei3ece1#

您可以将CURLOPT_NOBODY选项设置为不接收正文,然后使用curl_getinfo获取状态代码。
就像这样:

<?php

$URL  = 'http://www.google.com';
$curlHandle = curl_init();
curl_setopt($curlHandle, CURLOPT_URL, $URL);
curl_setopt($curlHandle, CURLOPT_HEADER, true);
curl_setopt($curlHandle, CURLOPT_NOBODY  , true);  // we don't need body
curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, true);
curl_exec($curlHandle);
$response = curl_getinfo($curlHandle, CURLINFO_HTTP_CODE);
curl_close($curlHandle); // Don't forget to close the connection

echo $response,""; 
?>
utugiqy6

utugiqy62#

首先,您只会得到标头(CURLOPT_NOBODY)。
然后捕获HTML作为结果(CURLOPT_RETURNTRANSFER)。
最后,使用正则表达式提取HTTP代码,该正则表达式获得由空格包围的第一个数字。

$URL  = 'http://www.google.com';
$curlHandle = curl_init();
curl_setopt($curlHandle, CURLOPT_URL, $URL);
curl_setopt($curlHandle, CURLOPT_NOBODY, true);
curl_setopt($curlHandle, CURLOPT_HEADER, true);
curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curlHandle);
preg_match('/ \d+ /', $response, $matches);
$response = $matches[0];
u0sqgete

u0sqgete3#

对于状态代码,您可以使用以下代码:

function getStatusCode($url) {
   $headers = get_headers($url);
   preg_match('/\s(\d+)\s/', $headers[0], $matches);
   return $matches[0];
 }

 echo getStatusCode('http://www.google.com');

http://php.net/manual/en/function.get-headers.php

相关问题