php curl多初始化HTTP 401未经授权

php curl多初始化HTTP 401未经授权,php,authentication,curl,Php,Authentication,Curl,我使用了一个curl single init来发出一个httpget,所有这些都工作得很好。 现在我尝试使用multi-init(因为我需要获取多个URL),在对get的响应上得到了一条401消息,上面写着“此请求需要HTTP身份验证”。 在两种情况下使用相同的卷曲选项。 这是多初始化的代码,下面是单初始化函数 protected function _multiQueryRunkeeper($uri, $subscribersInfo,$acceptHeader) { $c

我使用了一个curl single init来发出一个httpget,所有这些都工作得很好。 现在我尝试使用multi-init(因为我需要获取多个URL),在对get的响应上得到了一条401消息,上面写着“此请求需要HTTP身份验证”。 在两种情况下使用相同的卷曲选项。 这是多初始化的代码,下面是单初始化函数

protected function _multiQueryRunkeeper($uri, $subscribersInfo,$acceptHeader) {       
    $curlOptions = array(       
            CURLOPT_URL => 'https://api.runkeeper.com' . $uri,
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_TIMEOUT => 8,
            CURLOPT_HTTPAUTH => CURLAUTH_ANY,
            CURLOPT_HTTPGET => true
    );
    $curl_array = array();
    $mh = curl_multi_init();
    foreach ($subscribersInfo as $i => $subscriber) {
        $curl_array[$i] = curl_init();
        curl_setopt_array($curl_array[$i],$curlOptions);
        curl_setopt($curl_array[$i], CURLOPT_HEADER,
            array('Authorization: Bearer '.$subscriber['token'],
            'Accept: application/vnd.com.runkeeper.' . $acceptHeader));
        curl_multi_add_handle($mh,$curl_array[$i]);
    }
    $running = NULL;
    do {
        usleep(10000);
        curl_multi_exec($mh,$running);
    } while($running > 0);
    $subscribersWorkoutFeed = array();
    foreach($subscribersInfo as $i => $subscriber)
    {
            $subscribersWorkoutFeed[$i] = curl_multi_getcontent($curl_array[$i]);
            curl_multi_remove_handle($mh, $curl_array[$i]);
    }

    curl_multi_close($mh);
    return $subscribersWorkoutFeed;                   
}



protected function _singleQueryRunkeeper($uri, $subscriberToken,$acceptHeader) {
    try{
        // get fitness user's fitness activities from Runkeeper
        $this->_curl = isset($this->_curl)? $this->_curl : curl_init();
        $curlOptions = array(
            CURLOPT_URL => 'https://api.runkeeper.com' . $uri,
            CURLOPT_HTTPHEADER => array('Authorization: Bearer '.$subscriberToken,
                                        'Accept: application/vnd.com.runkeeper.' . $acceptHeader),
            CURLOPT_SSL_VERIFYPEER => false,
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_TIMEOUT => 8,
            CURLOPT_HTTPGET => true
        );
        curl_setopt_array($this->_curl,$curlOptions);
        $response = curl_exec($this->_curl);
        if($response == false) {
            if (Zend_Registry::isRegistered('logger')) {
                $logger = Zend_Registry::get('logger');
                $logger->log('Curl error on _singleQueryRunkeeper: '
                        . curl_error($this->_curl), Zend_Log::INFO);
            }
            return null;
        }
        $data = Zend_Json::decode($response);
        return($data);
    } catch(Exception $e){
        if (Zend_Registry::isRegistered('logger')) {
            $logger = Zend_Registry::get('logger');
            $logger->log('exception occured on getUsersLatestWorkoutsFromRK. Curl error'
                    . curl_error($this->_curl), Zend_Log::INFO);
        }
    }

}

提供有效的单curl请求代码。在我看来,“相同的选择”并不完全相同。另外,作为响应状态,您需要使用
HTTP身份验证
-
CURLOPT\u HTTPAUTH
/
CURLOPT\u USERPWD
。你有没有试过使用它,或者你只是“没有它也能用,为什么要试试?”?谢谢。我已经添加了单卷曲请求代码。我还尝试添加了CURLOPT_HTTPAUTH,但得到了相同的结果。至于CURLOPT_USERPWD,它是一个auoth协议,不需要用户和pwd。那么,试试
CURLOPT_FRESH_CONNECT,TRUE
。除此之外,请尝试检查您的
$subscribersInfo
有效性。例如,通过
\u singleQueryRunkeeper
对多个请求执行循环-您将看到它是否有效。另外,您确定singe query runner不会通过
$this->\u curl=isset($this->\u curl)获得带有附加选项的curl吗$this->_curl:curl_init()?作为旁注,您需要
curl\u close($curl\u数组[$i])
after
curl\u multi\u remove\u句柄($mh,$curl\u数组[$i])我相信我找到了问题所在。curl似乎不喜欢调用curl_setopt_数组,而且在调用curl_setopt之后。当我只使用curl_setopt_数组并删除curl_setopt时,一切正常。谢谢兰蒂的帮助。