Multi Curl one url返回null

时间:2016-03-28 10:53:02

标签: php curl

因此,我在不同的网址上获得了算法的不同部分,以使其更快。我总共收到了4个卷曲请求,其中一个有时会失败。他们都返回了一些东西,最后它根据所有的回答给出了结果。

失败的那个有时会从外部站点API请求客户数据,并在获取时将其插入数据库。如果客户数据超过30天,则使用数据库数据,否则会请求更新的数据。如果没有数据或超过30天,则返回null。最多花费3秒钟时间

我创建了一个多卷曲类。在一开始它会定期卷曲,返回cookie并使用多卷曲 - 用于传递登录。最后,它返回数组中的所有响应。

这可能是什么问题?

使用多卷曲的文件:

$multiCurl = new MY_MULTICURL_CLASS();
$multiCurl->setRequestData($data);
$multiCurl->addRequestUrl('http://sampleurl.com/');
$multiCurl->addRequestUrl('http://sampleurl.com/');
$multiCurl->addRequestUrl('http://sampleurl.com/');
$multiCurl->addRequestUrl('http://sampleurl.com/');
$responses = $multiCurl->getData();

MY_MULTICURL_CLASS getData方法:

public function getData()
    {
        /* Getting login cookie */
        $returnCookies = $this->loginCookies(null, true);
        //create the multiple cURL handle
        $mh = curl_multi_init();
        // set curl resources and options
        $k = 1;
        foreach ($this->requestURLS as $url)
        {
            ${"ch".$k} = curl_init();
            curl_setopt(${"ch".$k}, CURLOPT_URL, $url);
            curl_setopt(${"ch".$k}, CURLOPT_HEADER, 0);
            curl_setopt(${"ch".$k}, CURLOPT_COOKIE, implode(';', $returnCookies));
            curl_setopt(${"ch".$k}, CURLOPT_RETURNTRANSFER, true);
            curl_setopt(${"ch".$k}, CURLOPT_CONNECTTIMEOUT ,0);
            curl_setopt(${"ch".$k}, CURLOPT_TIMEOUT, 60);
            curl_setopt(${"ch".$k}, CURLOPT_POSTFIELDS, http_build_query($this->requestData));
            curl_multi_add_handle($mh, ${"ch".$k});
            $k++;
        }
        $active = null;
        //execute the handles
        do
        {
             $mrc = curl_multi_exec($mh, $active);
        }
        while ($mrc == CURLM_CALL_MULTI_PERFORM);
        while ($active && $mrc == CURLM_OK)
        {
            if (curl_multi_select($mh) != -1)
            {
                do
                {
                    $mrc = curl_multi_exec($mh, $active);
                }
                while ($mrc == CURLM_CALL_MULTI_PERFORM);
            }
        }
        for($i=1; $i <= count($this->requestURLS);$i++)
        {
            $content = curl_multi_getcontent(${"ch".$i});
            $response[] = json_decode($content, true);
            //close the handles
            curl_multi_remove_handle($mh, ${"ch".$i});
        }
        curl_multi_close($mh);
        return $response;
    }

0 个答案:

没有答案