为了账号安全,请及时绑定邮箱和手机立即绑定

在一百万循环中使用curl,出现transfer closed with ocsding read data remaining

在一百万循环中使用curl,出现transfer closed with ocsding read data remaining

PHP
万千封印 2019-03-15 01:06:25
业务大概是这样:一百万数据,循环一百万的数据,在循环的时候调用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,这个问题如何解决?还有谢谢各位的回答。
查看完整描述

2 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

为何不用 curl_multi_init

查看完整回答
反对 回复 2019-03-18
  • 2 回答
  • 0 关注
  • 616 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信