Position actuelle: Accueil> Derniers articles> Comment afficher les informations de débogage après la fin d'une session Curl avec Curl_close?

Comment afficher les informations de débogage après la fin d'une session Curl avec Curl_close?

gitbox 2025-05-26

Lorsque vous utilisez l'extension Curl de PHP pour les demandes HTTP, Curl_close () est une fonction couramment utilisée pour gratuitement des ressources une fois la demande terminée. Cependant, lorsque les développeurs déboguent ou dépannagent des problèmes, ils souhaitent souvent obtenir des informations détaillées pendant le processus de demande, telles que le temps de résolution DNS, le temps de connexion, l'en-tête de réponse, etc., la question est: alors la question est:

1. Curl_getInfo doit être appelé avant Curl_close

PHP fournit la fonction curl_getInfo () pour obtenir les informations de fonctionnement d'une poignée Curl, telles que le code d'état HTTP, la consommation totale de temps, le nombre de sauts, etc. mais sachez que cette fonction doit être appelée avant Curl_close () . Une fois la session fermée, la ressource de poignée pertinente sera détruite. Pour le moment, essayer d'obtenir des informations de débogage renverra des données vides ou une erreur sera lancée.

 $ch = curl_init('https://gitbox.net/api/example');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);

// Obtenir des informations de débogage,Doit être dans curl_close Avant
$info = curl_getinfo($ch);

curl_close($ch);

print_r($info);

2. Journaux plus détaillés: utilisez Curlopt_verbose pour produire des informations de débogage

Si vous souhaitez afficher des informations de débogage de niveau inférieur, telles que le journal de fonctionnement interne de Curl, vous pouvez activer l'option Curlopt_verbose . Cela écrit le journal de débogage à la ressource de flux spécifiée, généralement utilisée pour sortir sur un fichier ou une sortie standard PHP.

Exemple: écrivez des journaux verbeux au fichier

 $logFile = fopen(__DIR__ . '/curl_debug.log', 'w');

$ch = curl_init('https://gitbox.net/api/example');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, true); // Activer la journalisation détaillée
curl_setopt($ch, CURLOPT_STDERR, $logFile); // Spécifiez le fichier de sortie du journal

$response = curl_exec($ch);
curl_close($ch);

fclose($logFile);

Ce code rédigera des informations de débogage telles que le processus de connexion, l'en-tête de demande, l'en-tête de réponse, etc. dans le fichier curl_debug.log , qui est très adapté au dépannage de la poignée de main HTTPS, de la redirection et d'autres problèmes.

3. Solution d'extension facultative: Utilisez Curl pour implémenter l'encapsulation du journal HTTP

Dans les projets réels, si vous souhaitez gérer les journaux de demande, les messages d'erreur, etc. De manière unifiée, vous pouvez encapsuler les demandes de curl, telles que la mise en œuvre d'une classe de journalisation simple.

 function curlRequestWithLog($url, $logPath) {
    $fp = fopen($logPath, 'w');

    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_VERBOSE => true,
        CURLOPT_STDERR => $fp
    ]);

    $response = curl_exec($ch);
    $info = curl_getinfo($ch);

    curl_close($ch);
    fclose($fp);

    return ['response' => $response, 'info' => $info];
}

$result = curlRequestWithLog('https://gitbox.net/api/test', __DIR__ . '/debug.log');
print_r($result['info']);

Avec l'encapsulation, les développeurs peuvent facilement contrôler le processus de gestion des demandes et des journaux, en évitant les configurations répétées dans chaque demande.

4. Résumé

  1. curl_getInfo () doit être appelé avant curl_close () ;

  2. Pour afficher les informations de débogage détaillées, activez Curlopt_verbose et publiez le journal dans le fichier en conjonction avec curlopt_stderr ;

  3. L'encapsulation permet un meilleur contrôle de la sortie du journal et des processus de débogage.

La maîtrise de ces techniques de débogage est très nécessaire pour développer et maintenir les fonctions de demande de réseau PHP basées sur Curl. Surtout lors de la connexion à des API tierces (comme les interfaces Gitbox), la possibilité de saisir avec précision les détails de la demande améliorera considérablement l'efficacité de l'enquête de problème.