Получение curl_error(): 2 не является допустимым ресурсом дескриптора cURL при извлечении всех пользователей из freshdesk api

Я создаю свою собственную систему для управления всеми билетами, которые поступают из freshdesk.com через его API. Я делаю запрос curl для получения данных с freshdesk.com. С получением данных, связанных с тикерами, его работы прекрасны, но когда я запрашиваю для всех пользователей через запрос curl, то это дает мне ошибку:

Предупреждение: curl_errno(): 2 не является допустимым ресурсом дескриптора cURL в C:\wamp\www\test.php в строке 28.

Мой код выглядит так:

$ch = curl_init();  
$cOption = array(
    CURLOPT_URL            => 'http://velocity.freshdesk.com/contacts.xml',
    CURLOPT_HEADER         => 0,
    CURLOPT_USERPWD        => "$email:$password",
    CURLOPT_POST           => false,
    CURLOPT_HTTPHEADER     => array('Content-Type: application/xml'),
    CURLOPT_HTTPAUTH       => CURLAUTH_BASIC,
    CURLOPT_FAILONERROR    => 1,
    CURLOPT_SSL_VERIFYHOST => 2,
    CURLOPT_SSLVERSION     => 2
);  
@curl_setopt_array( $ch, $cOption );  
curl_close($ch);
echo curl_errno($ch);  //line 28
echo curl_error($ch);  //line 29
echo $ch_result;  

Выход:
Предупреждение: curl_errno(): 2 не является допустимым ресурсом дескриптора cURL в C:\wamp\www\test.php в строке 28.
Предупреждение: curl_errno(): 2 не является допустимым ресурсом дескриптора cURL в C:\wamp\www\test.php в строке 29.
1//вывод echo $ch_result

Пожалуйста, помогите мне разобраться, что не так с кодом и почему это предупреждение происходит.

Ответы

Ответ 1

Вы используете curl_errno и curl_error после закрытия $ch. Это неправильно.

Вам нужно закрыть $ch после получения информации об ошибке.

echo curl_errno($ch);
echo curl_error($ch);
curl_close($ch);

Также вы ничего не задали для $ch_result. Если вы ожидаете, что он содержит результат вашего запроса, вы ошибаетесь. Чтобы исправить это, вам нужно добавить опцию CURLOPT_RETURNTRANSFER и получить результат с помощью $ch_result = curl_exec($ch);

Ответ 2

echo curl_errno($ch);
echo curl_error($ch);

необходимо вызвать до curl_close($ch);

Ответ 3

Вы используете curl_errno и curl_error после закрытия $ch. Это неправильно.

Вам нужно закрыть $ch после получения информации об ошибке.

thats true, я получаю ответ на этот вопрос.

        $data = curl_exec($ch);
        if (!curl_errno($ch)) {
         ....
        }
        curl_close($ch);