Op het moment haal ik wat informatie binnen via een API. Nu komt het wel eens voor, dat ik de rate limit overschrijd. Dus zou ik graag een if-statement maken die deze header opvangt en wanneer deze daadwerkelijk 429 is. 10 sec slaapt en vervolgens de loop opnieuw uitvoert
// Set the url, number of GET vars, GET data
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// Execute request
$result = curl_exec($ch);
// Check for 429
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
Onthoud je ook eerder opgehaalde informatie? Zo nee: overweeg dat in plaats van deze constructie.
Rate limits zijn normaal best schappelijk volgens mij (of de dienst is gratis, in beide gevallen krijg je op den duur wat je betaalt :)), en zijn er niet voor niets.
// Set the url, number of GET vars, GET data
curl_setopt($ch, CURLOPT_URL, $url);
do {
// Execute request
$result = curl_exec($ch);
// Check for 429
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($httpCode == 429) {
echo 'error: 429<br>';
sleep(10);
// we zullen de curl_exec dus opnieuw gaan doen.
}
} while ($httpCode == 429);
Uiteraard sla ik het meeste op. Dit is ook maar een voorbeeld om mijn vraag wat duidelijker te maken. Het gaat hier niet alleen om de foutmelding "rate limit" (deze zijn overigens zeer schappelijk) het kan elke melding zijn. Mijn vraag is: kan ik de pointer van de foreach één terug zetten zodat hij nogmaals de zelfde loop maakt? dus niet de hele loop alleen het laatste element waar de foutmelding is ontstaan.
Of zou ik voor een loop als deze, waar ik soms een stap terug zou willen voor een for-loop moeten gaan?? Zo ja, is er dan ook een mogelijkheid om een key-element mee te geven?
Ah, ik had heel je post niet gezien. Dat is een geweldig idee, ik zat een beetje vast in mijn denkpatroon met die foreach-loop maar dit werkt misschien nog wel beter. Bedankt.