在while循环中执行api,给出500内部服务器错误

时间:2012-05-16 16:45:54

标签: php api curl

我正在使用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继续执行

1 个答案:

答案 0 :(得分:3)

HTTP错误分为几类:

  • 2xx是成功消息
  • 3xx是重定向消息
  • 4xx是客户端错误消息
  • 5xx是服务器错误消息

“500内部服务器错误”是您遇到的API的错误。你可能打得太快了,他们无法处理。如果API是您的,请尝试调试那里发生的事情。例如,当PHP发出致命错误(内存使用或超时可能导致致命错误)时,Apache会自动发送500。其他语言有类似的行为。

在while循环的每次迭代中尝试sleep(1)。代码应该运行得慢一些,但是如果一切顺利,那就意味着在你打得太难之前。还有一个usleep()函数用于以毫秒而不是秒为单位进行休眠。

Curl有一个CURLOPT_FAILONERROR选项。如果将其设置为true,则会忽略错误。如果您想要在请求失败时继续循环,应该会有所帮助。 curl_error()功能也很有用。