如何将curl和一组URL一起使用

时间:2017-11-17 12:36:15

标签: php arrays curl

我发现这个代码可以在单个域检查中执行我正在寻找的内容。但我有一个我想检查的URL列表。 你能和你如何用curl创建一个数组?

$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;

1 个答案:

答案 0 :(得分:0)

如果你想要的只是headers,那么请尝试代替curl

$urls = array('http://www.example.com','http://www.example.com2','http://www.example.com3','http://www.example4.com');

$httpCodes = [];
foreach($urls as $url)
{
    $httpCodes[$url] = get_headers($url)[0];
}

var_dump($httpCodes);

这使用get_headers()从网址的响应中获取标头数据。

修改或者,如果您真的想使用curl。您可以使用以下代码代替curl_multi

$urls = array('http://www.example.com','http://www.example.com2','http://www.example.com3','http://www.example4.com');

$curlMultiReq = curl_multi_init();
$ch = [];
foreach($urls as $key => $url)
{
    $ch[$key] = curl_init($url);
    curl_setopt($ch[$key], CURLOPT_HEADER, true);    // we want headers
    curl_setopt($ch[$key], CURLOPT_NOBODY, true);    // we don't need body
    curl_setopt($ch[$key], CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch[$key], CURLOPT_TIMEOUT,10);
    curl_multi_add_handle($curlMultiReq, $ch[$key]);
}
$running = '';


do {
  curl_multi_exec($curlMultiReq, $running);
  curl_multi_select($curlMultiReq);
} while ($running > 0);


foreach(array_keys($ch) as $key){
  echo curl_getinfo($ch[$key], CURLINFO_HTTP_CODE);
  echo "\n";  
  curl_multi_remove_handle($curlMultiReq, $ch[$key]);
}
curl_multi_close($curlMultiReq);