Die cURL-Bibliothek unter PHP besteht hauptsächlich aus zwei Requests und Guzzle, die beide sehr komplex sind.
Anfragen verwenden zuerst cURL. Wenn keine cURL vorhanden ist, werden fsockets automatisch aktiviert, es sei denn, Sie geben Transport manuell an.
Guzzle bietet umfassende Protokollbibliotheksunterstützung und Protokollformate. Zum Abonnieren verwendet es aus Code-Sicht einen Ereignismechanismus und weist eine höhere Qualität auf.
Es unterstützt nur cURL (zumindest nur v3) und basiert auf Symfonys EventEmitter, auf den sich ReactPHP verlässt.
Kürzlich (28.03.2014) habe ich festgestellt, dass der Namespace tatsächlich geändert wurde und die ersten beiden Absätze auf einen Absatz reduziert wurden. Level Guzzle wurde ebenfalls aus dem Quellcodeverzeichnis entfernt. Es ist bedeutungslos und weder vorwärtskompatibel noch inkonsistent mit anderen gängigen PHP-Bibliotheken.
Jetzt wird Guzzle normalerweise gut verwendet, aber ich habe gestern ein Problem festgestellt und muss zu Alipay gehen, um die Zahlungsergebnisse zu überprüfen. Beim Aufruf dieser URL ist Guzzle nicht erfolgreich, Requests jedoch schon.
Im Folgenden geht es um den cURL-Befehl. Er verfügt über zwei Timeouts, connect-timeout und timeout-max (letzteres wird im Programm normalerweise als Timeout bezeichnet), und letzteres schließt ersteres ein . Das standardmäßige Verbindungs-Timeout von cURLl beträgt 300 Sekunden, und für timeout-max ist kein Wert festgelegt. Aufgrund der Einbindung beträgt es jedoch mindestens 300 Sekunden, wenn Sie kein Timeout festlegen.
Was die fsockets von PHP betrifft, so beträgt der Standardwert nur 60 Sekunden, da es in php.ini ein Konfigurationselement default_socket_timeout gibt.
Darüber hinaus unterstützt cURL standardmäßig keine HTTP-Umleitung und muss die Option -L übergeben (keine Parameter). Basierend auf der Erfahrung mit PHP und Python aktivieren viele cURL-Bibliotheken jedoch standardmäßig die Umleitung. Zumindest in der Dokumentation von Guzzle heißt es eindeutig, dass es aktiviert ist und bei Bedarf manuell ausgeschaltet werden muss.