2017-08-03 5 views
-1

Ist es möglich zu töten/stoppen Multicurl-Anfragen, wenn eine der Anfragen den Statuscode 429 erhält?PHP kill laufenden multi curl Anfragen

Ich habe versucht, eine Lösung zu finden, da ich Daten von einer API abrufen und vermeiden muss, das Ratenlimit zu überschreiten.

Diese Anfragen sind asynchron, daher bin ich mir nicht sicher, wie ich das machen würde.

Antwort

1

Nun, Sie sollten in der Lage sein, sie mit einer CURLOPT_PROGRESSFUNCTION nach Belieben abzubrechen, eine globale Variable zu haben, um Übertragungen abzubrechen oder nicht, eine Funktion, die sie importiert (mit der global $var Syntax), und 1 zurückgibt, wenn es ist Zeit zum Abbrechen, zB $abort=false;ecurl_setopt($ch,CURLOPT_PROGRESSFUNCTION,function($a,$b,$c,$d,$e){global $abort;return (int)!$abort;}); - dann mach einfach $ abort = true; wenn es Zeit ist, sie abzubrechen. Das heißt, Sie CURLOPT_MAX_RECV_SPEED_LARGE verwenden können, um die Geschwindigkeit der Übertragungen zu begrenzen, wenn ihr ein Geschwindigkeitsratenbegrenzung sind Sie

bearbeiten oder weniger: beachten Sie, dass Sie müssen auch CURLOPT_NOPROGRESS auf false gesetzt für CURLOPT_PROGRESSFUNCTION überhaupt aufgerufen werden.

+0

Danke, scheint die meisten Anfragen zu stoppen, aber nicht alle, besser als nichts nehme ich an. Anstatt die Variable abort zu verwenden, verwende ich Memcache, um die Variable zu speichern und sie auf diese Weise zu überprüfen. Hoffentlich halte ich davon ab, zu viele 429 Antworten zu bekommen, ein bisschen schwierig, einen Ratenbegrenzer mit asynchronen Anfragen zu implementieren. – user2909323

Verwandte Themen