Parallele Abfragen mit cURL durchführen

Mit cURL lassen sich URLs parallel abfragen. Das funktioniert schneller als die Abfragen nacheinander durchzuführen.

URLs vorbereiten

Zunächst wird ein Array mit den URLs für die parallelen cURL-Abfragen benötigt.

1
2
3
4
5
6
7
$urls=
[
'http://domain.de/url-1.html',
'http://domain.de/url-2.html',
'http://domain.de/url-3.html',
'http://domain.de/url-4.html'
];

Mit einem Doppelklick kann der gesamte Code markiert werden.

cURL-Session erstellen

Für jede URL muss eine neue cURL-Session initialisiert werden. Die cURL-Optionen für jede Session werden ebenfalls festgelegt. Die cURL-Sessions werden im Array $curls gespeichert.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$curls=[];

foreach($urls as $id => $url)
{
$curls[$id]=curl_init();

curl_setopt($curls[$id],CURLOPT_POST,false);
curl_setopt($curls[$id],CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curls[$id],CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curls[$id],CURLOPT_HEADER,1);
curl_setopt($curls[$id],CURLOPT_NOBODY,0);
curl_setopt($curls[$id],CURLOPT_RETURNTRANSFER,1);
curl_setopt($curls[$id],CURLOPT_CONNECTTIMEOUT,20);
curl_setopt($curls[$id],CURLOPT_TIMEOUT,20);
curl_setopt($curls[$id],CURLOPT_FOLLOWLOCATION,0);
curl_setopt($curls[$id],CURLOPT_URL,$url);
}

Mit einem Doppelklick kann der gesamte Code markiert werden.

Danach wird der cURL-Multi-Handle initialisiert. Diesem werden die zuvor erstellten cURL-Sessions durch die Funktion curl_multi_add_handle zugewiesen.

1
2
3
4
5
6
$mh=curl_multi_init();

foreach($curls as $id => $curl)
{
curl_multi_add_handle($mh,$curls[$id]);
}

Mit einem Doppelklick kann der gesamte Code markiert werden.

cURL-Abfragen starten

Jetzt können die parallelen Abfragen gestartet werden. Die einzelnen Ergebnisse werden im Array $results gespeichert und können danach weiterverarbeitet werden.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
do
{
usleep(10000);
curl_multi_exec($mh,$running);
}
while($running > 0);


$results=[];

foreach($curls as $id => $curl)
{
$results[$id]=curl_multi_getcontent($curl);
curl_multi_remove_handle($mh,$curl);
}

Mit einem Doppelklick kann der gesamte Code markiert werden.

Über den Autor

Mein Name ist . Mit dieser Website möchte ich meine Erfahrungen an andere Webentwickler weitergeben und schnelle Lösungen für die alltäglichen Probleme anbieten. Das Erstellen von Artikeln ist aber auch zeitlich sehr aufwändig, weswegen ich über jede Unterstützung via Patreon dankbar bin.