获取有效的URL,它';s使用cURL的状态


Get effective URL and it's status using cURL

我写了一个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;