我正在使用curl执行someapi,在while循环中。如果我不执行api并且只是回显api正在执行什么,那么输出就很好......如果我执行那个api,让我们在while循环中说1000次......它会在一半时间内提供500个内部服务器错误。 / p>
我希望api应该一个接一个地执行(同步),如果它得到任何错误,它应该忽略它并继续。
这是我的代码:
while($res = mysqli_fetch_array($allDetail)){
$resulter = myCurl($res['var1'],$res['var2']);
}
function myCurl($var1,$var2){
$ch = curl_init('some_api_url_with_var1_var2');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
$response = curl_exec($ch);
curl_close($ch);
}
这是我第一次使用curl,我也是php新手。 api返回true或json格式的任何错误,但我不想关心它,只是api继续执行
答案 0 :(得分:3)
HTTP错误分为几类:
“500内部服务器错误”是您遇到的API的错误。你可能打得太快了,他们无法处理。如果API是您的,请尝试调试那里发生的事情。例如,当PHP发出致命错误(内存使用或超时可能导致致命错误)时,Apache会自动发送500。其他语言有类似的行为。
在while循环的每次迭代中尝试sleep(1)
。代码应该运行得慢一些,但是如果一切顺利,那就意味着在你打得太难之前。还有一个usleep()
函数用于以毫秒而不是秒为单位进行休眠。
Curl有一个CURLOPT_FAILONERROR
选项。如果将其设置为true,则会忽略错误。如果您想要在请求失败时继续循环,应该会有所帮助。 curl_error()
功能也很有用。