所以我试图从API中获取所有json数据,但是在获取所有数据时我无法可靠地获取循环结束。这是我目前的代码
$num = 1000;
$continue = TRUE;
$loops = 0;
while ($continue == TRUE AND $loops < 3) {
// initialize cURL session
$ch = curl_init($host . '/' . $service . '?limit=500' . '&offset=' . ($num)) or die("Could not connect to API.");
// set headers
$httpHeader = array(
'Content-Type: application/json;charset=UTF-8',
'Accept: application/json',
'SecureUrl: ' . $secureUrl,
'PrivateKey: ' . $privateKey,
'Token: ' . $token,
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $httpHeader);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$response = curl_exec($ch);
$json = json_decode($response, TRUE);
if ( isset($json[0]["Key"] )) {
$continue = FALSE;
}
$num += 500;
$loops++;
curl_close($ch);
}
之前声明了所有变量。如果num
达到某个数字后停止while循环,我就能得到json数据,但这并不总是可靠的。代码停止在第3次或第4次执行时输出json数据,并在那里挂起最多5分钟,然后喷出一堆错误。
任何帮助将不胜感激!
编辑:我找到了我的问题。无论我的if语句的参数是什么,我的程序都拒绝将$continue
更改为FALSE
。我已经更新了我的代码,如果有人可以说明为什么那会很棒。请注意,即使我将if参数设置为0 == 0
,$continue
仍然不会更改。
编辑2:我已经解决了所有问题。
答案 0 :(得分:0)
从您收到的错误来看,该网站似乎正在处理无效的网址并使用错误页面进行响应。因此,$response
并非虚假,$continue
始终为真。
您应该更好地检查结果。检查错误字符串,您知道这些字符串表示没有更多记录(可能有问题)或检查标题。希望API将返回错误的状态代码或其他内容。
即使您这样做,我也会为您的while
添加完整性检查。有一些计数器可以阻止循环失控:
$loops = 100;
while( $continue AND $loops > 0 ){
...
//Your code
...
$loops--;
}
这将确保您最多循环100次。