Получение 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 // вывод эха $ch_result

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


person user2393886    schedule 18.10.2013    source источник
comment
Вы также можете использовать if (is_resource($ch)) { curl_close($ch); } чтобы избежать предупреждений.   -  person Hari Prasad Sharma    schedule 20.02.2020


Ответы (3)


Вы используете 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);

person Michael Sivolobov    schedule 18.10.2013

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

должен быть вызван до curl_close($ch);

person Won Jun Bae    schedule 12.10.2015

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

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

Это правда, я получаю ответ этим.

        $data = curl_exec($ch);
        if (!curl_errno($ch)) {
         ....
        }
        curl_close($ch);
person Milad.biniyaz    schedule 06.08.2017