Parallele Abfragen mit cURL durchführen

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

15.09.2016

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=
[
[tab]'http://domain.de/url-1.html',
[tab]'http://domain.de/url-2.html',
[tab]'http://domain.de/url-3.html',
[tab]'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=[];
[tab][tab][tab]
foreach($urls as $id => $url)
{
[tab]$curls[$id]=curl_init();
[tab]
[tab]curl_setopt($curls[$id],CURLOPT_POST,false);
[tab]curl_setopt($curls[$id],CURLOPT_SSL_VERIFYPEER, 0);
[tab]curl_setopt($curls[$id],CURLOPT_SSL_VERIFYHOST, 0);
[tab]curl_setopt($curls[$id],CURLOPT_HEADER,1);
[tab]curl_setopt($curls[$id],CURLOPT_NOBODY,0);
[tab]curl_setopt($curls[$id],CURLOPT_RETURNTRANSFER,1);
[tab]curl_setopt($curls[$id],CURLOPT_CONNECTTIMEOUT,20);
[tab]curl_setopt($curls[$id],CURLOPT_TIMEOUT,20);
[tab]curl_setopt($curls[$id],CURLOPT_FOLLOWLOCATION,0);
[tab]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)
{
[tab]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
{
[tab]usleep(10000);
[tab]curl_multi_exec($mh,$running);
}
while($running > 0);


$results=[];

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

Mit einem Doppelklick kann der gesamte Code markiert werden.

Besser gefunden werden mit einem kostenlosen Branchenbucheintrag

Branchenbuch Brandenburg/HavelBranchenbuch PotsdamBranchenbuch MagdeburgBranchenbuch Dortmund

Werbung