Die Verwendung von Curl ist eine gemeinsame Wahl bei der Entwicklung von PHP -Programmen mit mehreren HTTP -Anforderungen, insbesondere bei einer großen Anzahl von API -Anforderungen. Um die Effizienz zu verbessern, bietet PHP eine Multi-Thread-Curl-Verarbeitungsfunktion curl_multi_* , mit der mehrere Anforderungen parallel gesendet werden können. Auf diese Weise kann das Programm mehrere Anforderungen gleichzeitig bearbeiten, anstatt auf eine Antwort nacheinander zu warten.
Wenn wir jedoch Multi-Thread-Curl verwenden, müssen wir nicht nur Anfragen senden, sondern auch Daten wie Ausführungsstatus, Fehlerinformationen und zurückgegebene Inhalte jeder Anfrage in Echtzeit zurückgeben. Die Funktion curl_multi_info_read () ist eines der Tools, mit denen wir diese Informationen erhalten.
Die Funktion curl_multi_info_read () ist eine Funktion in PHP, die den Ausführungsstatus mehrerer paralleler Curl -Anforderungen erhält. Dadurch können Entwickler den Ausführungsfortschritt und den Status jeder Anfrage in Echtzeit überwachen, wenn mehrere Anforderungen parallel sind. Diese Funktion gibt ein Array zurück, das den aktuellen Anforderungsstatus einschließlich des HTTP -Statuscodes enthält, unabhängig davon, ob die Anforderung erfolgreich ist, usw.
Um curl_multi_info_read () zu verwenden, müssen Sie eine Multithread -Curl -Sitzung über curl_multi_init () initialisieren und dann über curl_multi_add_handle () mehrere separate Curl -Handle zur Sitzung hinzufügen. Schließlich können Sie Curl_Multi_exec () verwenden, um Anforderungen parallel auszuführen und den Ausführungsstatus jeder Anforderung zu erhalten.
Hier ist ein einfaches Beispiel:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Multithreading initialisieren cURL Sitzung</span></span><span>
</span><span><span class="hljs-variable">$mh</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_multi_init</span></span><span>();
</span><span><span class="hljs-comment">// Multiple erstellen cURL Handhaben</span></span><span>
</span><span><span class="hljs-variable">$ch1</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_init</span></span><span>(</span><span><span class="hljs-string">"https://www.example.com"</span></span><span>);
</span><span><span class="hljs-variable">$ch2</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_init</span></span><span>(</span><span><span class="hljs-string">"https://www.example.org"</span></span><span>);
</span><span><span class="hljs-comment">// aufstellen cURL Optionen</span></span><span>
</span><span><span class="hljs-title function_ invoke__">curl_setopt</span></span><span>(</span><span><span class="hljs-variable">$ch1</span></span><span>, CURLOPT_RETURNTRANSFER, </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_setopt</span></span><span>(</span><span><span class="hljs-variable">$ch2</span></span><span>, CURLOPT_RETURNTRANSFER, </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-comment">// Wille cURL Handhaben添加到多线程Sitzung中</span></span><span>
</span><span><span class="hljs-title function_ invoke__">curl_multi_add_handle</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>, </span><span><span class="hljs-variable">$ch1</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_multi_add_handle</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>, </span><span><span class="hljs-variable">$ch2</span></span><span>);
</span><span><span class="hljs-comment">// Eine Anfrage ausführen</span></span><span>
</span><span><span class="hljs-keyword">do</span></span><span> {
</span><span><span class="hljs-variable">$status</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_multi_exec</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>, </span><span><span class="hljs-variable">$active</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$active</span></span><span>) {
</span><span><span class="hljs-comment">// Warten Sie, bis die Anfrage abgeschlossen ist</span></span><span>
</span><span><span class="hljs-title function_ invoke__">curl_multi_select</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>);
}
} </span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$active</span></span><span>);
</span><span><span class="hljs-comment">// Erhalten Sie den Ausführungsstatus jeder Anfrage</span></span><span>
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$info</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_multi_info_read</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>)) {
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$info</span></span><span>[</span><span><span class="hljs-string">'result'</span></span><span>] === CURLE_OK) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Request to "</span></span><span> . </span><span><span class="hljs-variable">$info</span></span><span>[</span><span><span class="hljs-string">'handle'</span></span><span>] . </span><span><span class="hljs-string">" succeeded.\n"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Request to "</span></span><span> . </span><span><span class="hljs-variable">$info</span></span><span>[</span><span><span class="hljs-string">'handle'</span></span><span>] . </span><span><span class="hljs-string">" failed with error: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">curl_error</span></span><span>(</span><span><span class="hljs-variable">$info</span></span><span>[</span><span><span class="hljs-string">'handle'</span></span><span>]) . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
}
</span><span><span class="hljs-comment">// Aufräumen</span></span><span>
</span><span><span class="hljs-title function_ invoke__">curl_multi_remove_handle</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>, </span><span><span class="hljs-variable">$ch1</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_multi_remove_handle</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>, </span><span><span class="hljs-variable">$ch2</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_multi_close</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
curl_multi_info_read () gibt ein Array mit Anforderungsinformationen zurück, einschließlich der folgenden Felder:
Handle : Der entsprechende Curl -Griff.
Ergebnis : Ausführungsergebnis. Wenn der Wert Curle_OK ist, ist die Anforderung erfolgreich. Wenn die Anforderung fehlschlägt, wird der entsprechende Fehlercode zurückgegeben.
MSG : Der Nachrichtentyp wurde zurückgegeben (normalerweise curlmsg_done , was angibt, dass die Anforderung abgeschlossen wurde).
Die Funktion gibt ein Array zurück, und wenn keine Anforderungsinformationen mehr vorhanden sind, gibt es NULL zurück.
Wenn mehrere parallele Anfragen gestellt werden, wird die Ausführungseffizienz des Programms erheblich verbessert, insbesondere wenn keine direkte Abhängigkeit zwischen den Anfragen besteht. Mit CURL_MULTI_INFO_READ () können wir den Status jeder Anforderung in Echtzeit überwachen, um sicherzustellen, dass relevante Informationen zu Zeiten erhalten werden können, Ausnahmen abwickeln oder zurückgegebene Daten erhalten, wenn die Anforderung abgeschlossen ist.
Mit curl_multi_info_read () können wir:
Erhalten Sie den Ausführungsstatus der Anfrage : Bestätigen Sie, ob die Anfrage erfolgreich ist.
Erfassen Sie die angeforderte Fehlermeldung : Wenn die Anforderung fehlschlägt, kann der Fehlercode sofort für eine einfache nachfolgende Verarbeitung abgerufen werden.
Rufen Sie die Anforderungsantwortdaten in Echtzeit ab : Wenn die Anforderung erfolgreich ist, erhalten Sie die zurückgegebenen Daten und verarbeiten Sie sie.
curl_multi_info_read () wird in einigen Szenarien besonders wichtig, in denen HTTP -Anforderungen in Stapeln verarbeitet werden. Zum Beispiel:
Batch Data Crawling : Fragen Sie mehrere Websites gleichzeitig an, um Daten zu erhalten und zu analysieren.
Parallele API -Aufruf : Wenn mehrere externe APIs aufgerufen werden müssen, kann gleichzeitig eine Anforderung eingeleitet werden, um die zurückgegebenen Daten zu erhalten.
DIGGALE-SCHRAFFUNGEN ANFORMATIONEN : Senden und verarbeiten Sie mehrere Anfragen effizient, um Blockierung zu vermeiden.
curl_multi_info_read () bietet ein leistungsstarkes und praktisches Tool in PHP, um den Ausführungsstatus mehrerer Curl -Anforderungen zu erhalten. Mit dieser Funktion können wir den Fortschritt paralleler Anfragen, Erfassungsfehlerinformationen und Anforderungsergebnisse erhalten, wodurch die Ausführungseffizienz von Multi-Request-Aufgaben erheblich verbessert werden können. Ob in Crawler -Entwicklung, Batch -Datenkriech- oder parallelen API -Aufrufen, curl_multi_info_read () ist ein unverzichtbares Werkzeug.
Verwandte Tags:
cURL