我写了一个PHP脚本,它将遍历大约500个URL并检查它们的状态:
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_exec($ch);
$destURL = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $destURL . " - " . $statusCode;
这可以进一步优化吗?或者有更好的方法吗?
使用GuzzleHttp:可以很容易地做到这一点
use GuzzleHttp'TransferStats;
$effectiveURL = '';
$statusCode = 0;
$client = new GuzzleHttp'Client();
$client->get($url, [
'on_stats' => function (TransferStats $stats) use (&$effectiveURL, &$statusCode) {
$effectiveURL = (string) $stats->getEffectiveUri();
if ($stats->hasResponse()) {
$statusCode = $stats->getResponse()->getStatusCode();
}
},
]);
echo $effectiveURL . '<br>';
echo $statusCode;