业务大概是这样:一百万数据,循环一百万的数据,在循环的时候调用curl。
代码:
// 开始循环一百万的数据
foreach($data as $value){
// 调用curl
tocurl($url, $header, $value);
}
// curl函数
function tocurl($url, $header, $content){
$ch = curl_init();
if(substr($url,0,5)=='https'){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true); // 从证书中检查SSL加密算法是否存在
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
if($content) {
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
}
$response = curl_exec($ch);
if($error=curl_error($ch)){
die($error);
}
curl_close($ch);
return $response;
}
尝试:
1. 开始没有设置 CURLOPT_TIMEOUT 和 CURLOPT_CONNECTTIMEOUT,然后设置为:
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
然而还是出现 transfer closed with ocsding read data remaining 这个问题
2. 通过 stack overflow 搜索找到一个方法,回答是这样的:缺少 Content-Length 这个 header,
然后设置 POST 的数据 json_encode 通过 strlen() 计算其字数,然后设置 Content-lenth,
在去尝试运行,还是出现 transfer closed with ocsding read data remaining 这个问题
3. 后面以为是数据量太大,把这一百万数据准备分成了十个线程去跑,在测试跑一个线程(10万数据)的时候也出现了 transfer closed with ocsding read data remaining 这个问题,看起来像是curl的问题。
php的版本是5.3,这个问题如何解决?还有谢谢各位的回答。
添加回答
举报
0/150
提交
取消