1

我在一个while循环中用curl执行someapi。如果我不执行 api 而只是回显 api 正在执行的内容,则输出很好......如果我执行那个 api,让我们在一个 while 循环中说 1000 次......它在中途给出 500 内部服务器错误。

我希望 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继续执行

4

1 回答 1

3

HTTP错误分为几类:

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

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

在 while 循环的每次迭代中尝试 a sleep(1)。代码应该运行得更慢,但如果一切顺利,这意味着在你用力打击它们之前。还有一个usleep()以毫秒而不是秒为单位睡眠的功能。

卷曲有一个CURLOPT_FAILONERROR选择。当它设置为 true 时,它​​会忽略错误。如果您想在请求失败时继续循环,应该会有所帮助。该curl_error()功能也很有用。

于 2012-05-16T17:35:40.520 回答