web-dev-qa-db-fra.com

Obtenir curl_error (): 2 n'est pas une ressource de handle cURL valide lors de la récupération de tous les utilisateurs à partir de l'API Freshdesk

Je crée mon propre système pour gérer tous les billets qui proviennent de freshdesk.com via son API. Je fais une demande curl pour récupérer les données de freshdesk.com. Avec obtenir des données liées aux tickers, cela fonctionne bien, mais lorsque je demande à tous les utilisateurs via une demande de boucle, cela me donne une erreur:

Avertissement: curl_errno (): 2 n'est pas une ressource de cURL valide dans C:\wamp\www\test.php sur la ligne 28.

Mon code est comme ça:

$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;  

La sortie est:
Attention: curl_errno (): 2 n'est pas une ressource de cURL valide dans C:\wamp\www\test.php sur la ligne 28.
Attention: curl_errno (): 2 n'est pas une ressource de cURL valide dans C:\wamp\www\test.php sur la ligne 29.
1 // sortie d'écho $ ch_result

Veuillez m'aider à comprendre ce qui ne va pas avec le code et pourquoi ces avertissements se produisent.

26
user2393886

Vous utilisez curl_errno Et curl_error Après avoir fermé $ch. Ce n'est pas correct.

Vous devez fermer votre $ch Après avoir récupéré des informations sur l'erreur.

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

De plus, vous n'avez rien défini sur $ch_result. Si vous vous attendez à ce qu'il contienne le résultat de votre demande, vous vous trompez. Pour résoudre ce problème, vous devez ajouter l'option CURLOPT_RETURNTRANSFER Et récupérer le résultat avec $ch_result = curl_exec($ch);

75
Michael Sivolobov
echo curl_errno($ch);
echo curl_error($ch);

doit être appelé avant curl_close($ch);

13
Won Jun Bae

Vous utilisez curl_errno et curl_error après avoir fermé $ ch. Ce n'est pas correct.

Vous devez fermer votre $ ch après avoir récupéré des informations sur l'erreur.

c'est vrai, je reçois une réponse à cette question.

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