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:
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);
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.
$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.
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.
curl_getInfo () doit être appelé avant curl_close () ;
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 ;
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.