我要连接到公共API,以便在两个网站之间同步某些内容。 PHP CURL用于访问JSON API和下载二进制映像(以下代码示例不包括二进制下载,原因简单!)。
一切正常,直到几百个请求之后,我得到了“无法解决主机问题”的问题。从curl_error($ ch)开始,响应$ body为空,返回的$ http_code为0. curl返回空响应,直到脚本完成工作。网址肯定是正确的。
系统
该脚本在Debian Linux 6.0机器上运行,使用PHP 5.3.3-7 + squeeze26。
已经尝试过:
任何想法可能导致这种行为?
卷曲代码
function getData($url, $countRetries = 0) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_STDERR, $log_stderr = fopen('/var/log/curl.log', 'a'));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json'));
$response = curl_exec($ch);
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$body = substr($response, $header_size);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);
fclose($log_stderr);
if ($http_code == 0 && $countRetries < 3) {
sleep(10);
return getData($data, $countRetries);
}
return $body;
}
答案 0 :(得分:0)
您确定您的脚本不是太激进吗?由于传入的请求数量过多,目标主机可能暂时阻止您(或脚本的主机)。尝试限制你的脚本(像睡眠一样愚蠢(1)每个X请求都可以工作)。